أكثر

احصل على قيمة سمة الشكل المضلع في نقطة معينة باستخدام Python (على سبيل المثال عبر PyShp)

احصل على قيمة سمة الشكل المضلع في نقطة معينة باستخدام Python (على سبيل المثال عبر PyShp)


لدي ملف شكل يشتمل على مضلعات متعددة. هذه المضلعات لها سمات. أحاول كتابة برنامج نصي في بايثون يأخذ نقطة إحداثيات ، ويحدد المضلع الذي يقع فيه ، ويعيد سمات هذا المضلع.

حتى الآن ، باستخدام PyShp ، حصلت على هذا ، والذي يطبع جميع السجلات.

استيراد shapefile sf = shapefile.Reader ("England.shp") سجلات = sf.records () سجلات الطباعة

لذلك أريد أن أمرر إحداثيات لقصر باكنغهام ، وهو داخل مضلع له السمة "المنطقة" قيمة "لندن" وإعادته "لندن"

يمكن لأي شخص لي نقطة في الاتجاه الصحيح؟


في أبسط مستوى ، يجب عليك إجراء حلقة عبر كل مضلع في ملف الشكل الخاص بك والتحقق لمعرفة ما إذا كان يشير إلى داخله. يمكنك إيقاف الحلقة عندما تجد المضلع الصحيح. يمكنك تسريع هذه العملية قليلاً عن طريق التحقق مما إذا كانت النقطة داخل مدى المضلع. من خلال التحقق من المدى أولاً ، فإنك تقوم بسرعة بتضييق الإمكانيات عن طريق التحقق بسرعة من نقاط المستطيل الأربع.

تتحقق الوظيفة التالية من وجود نقطة داخل مضلع. هذه الوظيفة وحدها ستجيب على سؤالك. إذا كنت تستخدم طريقة pyshp shapeRecords () ، فستحتفظ بالشكل الهندسي والسجلات المرتبطة ، لذلك عندما تعثر على المضلع الصحيح ، سيكون لديك وصول سهل إلى السمات:

def point_in_poly (x، y، poly): # تحقق مما إذا كانت النقطة هي رأس إذا (x، y) في poly: قم بإرجاع "IN" # تحقق مما إذا كانت النقطة على حد بالنسبة لـ i في النطاق (len (poly)): p1 = بلا p2 = بلا إذا i == 0: p1 = poly [0] p2 = poly [1] else: p1 = poly [i-1] p2 = poly [i] if p1 [1] == p2 [1] و p1 [1] == y and x> min (p1 [0]، p2 [0]) و x  min (p1y، p2y): if y <= max (p1y، p2y) : إذا كانت x داخل = ليس داخل p1x ، p1y = p2x ، p2y إذا كان في الداخل: إرجاع "IN" وإلا: إرجاع "OUT" # اختبار قمة لتضمين poligono = [(-33.416032 ، -70.593016) ، (-33.415370 ، -70.589604) ، ( -33.417340، -70.589046)، (-33.417949، -70.592351)، (-33.416032، -70.593016)] lat = -33.416032 lon = -70.593016 print point_in_poly (lat، lon، poligono) # اختبار نقطة حدية لتضمين poly2 = [ (1،1)، (5،1)، (5،5)، (1،5)، (1،1)] x = 3 y = 1 نقطة طباعة_ in_poly (س ، ص ، بولي 2)

شاهد الفيديو: Membaca file shp dengan PyShp Python