أكثر

كيف يمكنني عرض الطول حسب زاوية الخط؟

كيف يمكنني عرض الطول حسب زاوية الخط؟


أريد عرض الطول وفقًا لصورة الجزء 1. ولكن الآن جعلها مثل الجزء 2. أنا أستخدم الكود أدناه.

استيراد ملف أشكال من استيراد صورة PIL ، ImageDraw ، ImageFont من qgis.utils استيراد iface من PyQt4.QtCore استيراد QVariant import math import psycopg2 try: 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 () layer = iface.activeLayer () feature_dict = {f.id (): f لـ f في layer.getFeatures ()} index = QgsSpatialIndex () لـ f في feature_dict.values ​​() : index.insertFeature (f) Chalata_array = [] neighbors_chalata_array = {} neighbors_pixels_array = {} Points_full_array = {} لـ f in feature_dict.values ​​(): polygon_f_id = [] polygon_f_id.append (f.id ()) Chalendata ( f ['STRING_']) neighbors_chalata_first = [] neighbors_chalata_first.append (f ['STRING_']) geom = f.geometry () Points_full_array_first = [] intersecting_ids = index.intersects (geom.boundingBox ()) للتقاطع cting_id في intersecting_ids: intersecting_f = feature_dict [intersecting_id] if (f! = intersecting_f وليس intersecting_f.geometry (). disjoint (geom)): neighbors_chalata_first.append (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)) neighbors_pixels_first = {} لـ get_id في النطاق (len (polygon_f_id) ): neighbors_pixels_secound = [] لـ x، y في r.shapes () [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) neighbors_pixels_secound.append ((px، py)) Points_full_array_first.append ((px، py)) neighbours_pixels_first [get_id] = neighbors_pixels_secound Points_full_array [f ['STRING _']] = Points_full_array_first neighbors_chalata_array [f ['STRING _']] = جيران_ شلالات_ أول جيران_ بكسل _array [f ['STRING _']] = neighbors_pixels_first #print Points_full_array #printeers_chalata_array #print neighbors_pixels_array لـ chalata_no_i في النطاق (len (Chalata_array)): fnt = ImageFont.truetype ('C:  example  GJBWAV0B). fnt_new = ImageFont.truetype ('C:  example  GJBWAV0B.ttf'، 15) img = Image.new ("RGB" ، (iwidth ، iheight) ، "أبيض") draw = ImageDraw.Draw (img) image_name = Chalata_array [chalata_no_i] لـ new_chalata_no في النطاق (len (neighbors_pixels_array [Chalata_array [chalata_no_i]])): if (new_chalata_no == 0): get_pixels =eers_pixels_array [Chalata_array [chalata_no_i]] [new_chaly_no get_pixels) n = len (get_pixels) # من منطقة الزوايا = 0.0 لـ i في النطاق (n): j = (i + 1)٪ n area + = get_pixels [i] [0] * get_pixels [j] [1] المنطقة - = get_pixels [j] [0] * get_pixels [i] [1] المنطقة = القيمة المطلقة (المنطقة) / 2.0 # new_area = المنطقة / 1000 cur.execute ("SELECT id FROM maap_chalta_no حيث المنطقة =٪ s و 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 "، (area، cur.fetchone () [0])) else: query_three = "INSERT INTO maap_chalta_no (منطقة ، تالوكا ، قرية ، Chalto_Number ، maap_number) VALUES (٪ s ،٪ s ،٪ s ،٪ s ،٪ s)" قيم_ثري = ( "તાપી"، "વ્યારા"، "આરકુંડ"، Chalata_array [chalata_no_i]، area) # Execute sql Query cur.execute (query_three، values_three) conn.commit () x = [p [0] for p in get_pixels] y = [p [1] لـ p في get_pixels] centroid = (sum (x) / len (get_pixels) ، sum (y) / len (get_pixels)) draw.text (centroid ، str (neighbors_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] for p in lin_points_array] y_line = [p [1] for p in 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}". format (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] else: #print new_chalata_no get_pixels = neighbors_pixels_array [Chalata_array_i] [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 (neighbors_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): if (((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، fill = "black"، width = 1) x_line = [p [0] for p in lin_points_array] y_line = [p [1] for p in 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> 10) org_length = "{:. 2f}". format (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 وطريقة السمت () الخاصة بها.


شاهد الفيديو: خطوط الطول ودوائر العرض