יותר

כיצד אוכל להציג אורך לפי זווית קו?


אני רוצה להציג אורך לפי חלק 1 תמונה. אבל עכשיו זה עושה כמו חלק 2. אני משתמש בקוד שלהלן.

ייבוא ​​קובץ form מ- PIL יבוא תמונה, ImageDraw, ImageFont מ- qgis.utils ייבוא ​​iface מ- PyQt4.QtCore יבוא QVariant יבוא מתמטיקה psycopg2 נסה: conn = psycopg2.connect ("dbname = 'postgres' user =" postgres "host =" localhost " password = "mindcrew01" ") למעט: הדפס" אני לא מצליח להתחבר למסד הנתונים "cur = conn.cursor () r = shapefile.Reader (" K:  NEW_GIS  Arkund  Arkund  ESRI SHAPE FILE  ADJUJICATION  Final  Arkund_Corr ") צורות = r.shapes () שכבה = iface.activeLayer () feature_dict = {f.id (): f עבור f ב- layer.getFeatures ()} index = QgsSpatialIndex () עבור f ב- feature_dict.values ​​() : index.insertFeature (f) Chalata_array = [] שכנים_צ'לטה_איריי = {} שכנים_פיקסל_ארריי = {} נקודות_פול_איריי = {} עבור f ב- feature_dict.values ​​(): polygon_f_id = [] polygon_f_id.append (f.id ()) Chalata_array. f ['STRING_']) neighbours_chalata_first = [] שכנים_chalata_first.append (f ['STRING_']) geom = f.geometry () points_full_array_first = [] intersecting_ids = index.intersects (geom.boundingBox ()) עבור interse cting_id ב- intersecting_ids: intersecting_f = feature_dict [intersecting_id] if (f! = intersecting_f ולא intersecting_f.geometry (). disjoint (geom)): שכנים_צ'אלאטה_פירסט.הצטרף (intersecting_f ['STRING_']) polygon__. ) iwidth = 680 iheight = 449 xdist = צורות [f.id ()]. ​​bbox [2] - צורות [f.id ()]. ​​bbox [0] ydist = צורות [f.id ()]. ​​bbox [3 ] - צורות [f.id ()]. ​​bbox [1] xratio = (iwidth/(xdist+82)) yratio = (iheight/(ydist+15)) neighbours_pixels_first = {} עבור get_id בטווח (len (polygon_f_id) ): neighb_pixels_secound = [] עבור x, y בצורות r. () [polygon_f_id [get_id]]. נקודות: px = int ((iwidth - ((צורות [polygon_f_id [0]]. bbox [2] - x) * xratio) -100)) py = int (((צורות [polygon_f_id [0]]. bbox [3] - y) * yratio) +30) neighb_pixels_secound.append ((px, py)) points_full_array_first.append ((px, py)) neighbours_pixels_first [get_id] = neighb_pixels_secound points_full_array [f ['STRING _']] = points_full_array_first שכן_chalata_array [f ['STRING _']] = שכנים_צ'אלאטה_שכנים_פיקסלים _array [f ['STRING _']] = שכנים_פיקסלים_פריטים הראשונים #הדפסה_מלא_ערך #הדפסה שכנים_צ'אלאטה_מערך #הדפסה שכנים_פיקסלים_מערכת עבור chalata_no_i בטווח (len (Chalata_array)): fnt = ImageFont.truetype ('C:  example  GJBWAV0. fnt_new = ImageFont.truetype ('C:  example  GJBWAV0B.ttf', 15) img = Image.new ("RGB", (iwidth, iheight), "white") draw = ImageDraw.Draw (img) image_name = Chalata_array ] get_pixels) n = len (get_pixels) # אזור פינות = 0.0 ל- i בטווח (n): j = (i + 1) % n שטח + = get_pixels [i] [0] * get_pixels [j] [1] שטח -= get_pixels [j] [0] * get_pixels [i] [1] area = abs (area) / 2.0 #new_area = area / 1000 cur.execute ("SELECT id FRAM maap_chalta_no where district =%s and taluka =%s וכפר =%s ו- Chalto_Number =%s ", (" તાપી "," વ્યારા "," આરકું ડ ", Chalata_array [chalata_no_i])) #print cur.fetchone () [0] if (cur.rowcount> 0): cur.execute (" UPDATE maap_chalta_no SET maap_number =%s WHERE id =%s ", (שטח, cur.fetchone () [0])) else: query_three = "הכנס ל- maap_chalta_no (מחוז, טאלוקה, כפר, Chalto_Number, maap_number) VALUES ( %s, %s, %s, %s, %s)" values_three = ( "તાપી", "વ્યારા", "આરકુંડ", Chalata_array [chalata_no_i], שטח) # בצע שאילתת qul cur.execute (query_three, values_three) conn.commit () x = [p [0] עבור p ב- get_pixels] y = [p [1] עבור p ב- get_pixels] centroid = (sum (x) / len (get_pixels), sum (y) / len (get_pixels)) draw.text (centroid, str (neighb_chalata_array [Chalata_array [chalata_no_i]] [new_chalata_no] ]), font = fnt, fill = "black") עבור get_line_point בטווח (len (get_pixels)): if (get_line_point! = 0): lin_points_array = [(line_x, line_y), (get_pixels [get_line_point] [0], get_pixels [get_line_point] [1])] draw.line (lin_points_array, fill = "black", width = 4) x_line = [p [0] עבור p ב- lin_points_array] y_line = [p [1] עבור p ב- lin_points_array] cen troid_new = ((sum (x_line) /2), (sum (y_line) /2)) line_length = math.hypot (get_pixels [get_line_point] [0] - line_x, get_pixels [get_line_point] [1] -line_y) new_line_length = line_length /3.28084 if (new_line_length> 10): org_length = "{:. 2f}". פורמט (new_line_length) #new_org_length = org_length.split ('.') #New_new_org_length = new_org_length [0]+'.'+New_org_length [1] draw.text (centroid_new, org_length, font = fnt_new, fill = "black") line_x = get_pixels [get_line_point] [0] line_y = get_pixels [get_line_point] [1] אחר: #print new_chalata_no get_pixels = שכנים_פיקסלים [chalata_array] [new_chalata_no] x = [p [0] עבור p ב- get_pixels] y = [p [1] עבור p ב- get_pixels] centroid = (sum (x) / len (get_pixels), sum (y) / len (get_pixels)) draw.text (centroid, str (neighb_chalata_array [Chalata_array [chalata_no_i]] [new_chalata_no]), font = fnt, fill = "black") עבור get_line_point בטווח (len (get_pixels)): if (get_line_point! = 0): אם (((get_pixels [get_line_point] [0], get_pixels [get_line_point] [1]) בשכנים_פיקסל_אר ray [Chalata_array [chalata_no_i]] [0]) == False): lin_points_array = [(line_x, line_y), (get_pixels [get_line_point] [0], get_pixels [get_line_point] [1])] draw.line (lin_points_array, מילוי = "שחור", רוחב = 1) x_line = [p [0] עבור p ב- lin_points_array] y_line = [p [1] עבור p ב- lin_points_array] centroid_new = ((sum (x_line) / len (lin_points_array)), (sum (y_line) / len (lin_points_array))-20) line_length = math.hypot (get_pixels [get_line_point] [0]-line_x, get_pixels [get_line_point] [1] -line_y) new_line_length = line_length / 3.28084 if (new_line_length> org_length = "{:. 2f}". פורמט (new_line_length) #new_org_length = org_length.split ('.') #new_new_org_length = new_org_length [0]+'.'+new_org_length [1] draw.text (centroid_new, org_length, font) = fnt_new, fill = "black") line_x = get_pixels [get_line_point] [0] line_y = get_pixels [get_line_point] [1] img_new_name = "C:/example/Images/Chalta_no _"+str (image_name)+". png">


האם אני מבין נכון, אתה רוצה לצייר את התוויות במקביל לקווים?

שאלה דומה מאוד נענתה רק היום - כיצד לתייג צדדים בודדים של מצולע, באמצעות QGIS עצמו. זו אולי דרך קלה יותר להשיג זאת.

אני רואה שאתה משתמש ב- PIL לביצוע העיבוד הזה. האם התשובה הזו עוזרת?

אם אתה רוצה להשתמש ב- PIL, יהיה עליך לדעת את זווית הסיבוב של כל קצה. אני ממליץ לך להסתכל על QgsPoint ועל שיטת האזימוט () שלה.


צפו בסרטון: 20181218091658 (סֶפּטֶמבֶּר 2021).