أكثر

تقاطع مضلعين مع نفس FID؟

تقاطع مضلعين مع نفس FID؟


أحتاج إلى إجراء تقاطع بين طبقتين ، واحدة عبارة عن كتل والأخرى عبارة عن مخازن لكل كتلة بنفس حجم الطريق. تشترك الكتل والمخازن المؤقتة في نفس FID.

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

مهاراتي في الثعبان محدودة لكني أتعلم.


يستخدم هذا الحل لغة python (w /أركبي) لإقران هندسة الكتل والمخازن المؤقتة بناءً علىFID، ينفذ تقاطعًا بين تلك الأزواج ، ويكتب الهندسة الناتجة إلى ملف شكل جنبًا إلى جنب مع ميزات المصدر 'FID. تضيف الوظيفة الأخيرة في البرنامج النصي النسبة المئوية لكل مخزن مؤقت يتكون من هندسة "التقاطع" المقابلة لها (أي انضغاط الكتلة) وتكتبها في الحقلمدمجةمن ملف الشكل التقاطع.

لتكييف هذا البرنامج النصي مع مشروعك ، ما عليك سوى تعيين ملفكتلومخازنالمتغيرات إلى مسارات الملفات لمجموعات البيانات الخاصة بك وتعيين الامتدادتداخلغيّر المسار حيث تريد كتابة الإخراج.

استيراد نظام التشغيل Arcpy من مسار استيراد نظام التشغيل من arcpy import da، env، management env.overwriteOutput = True block = 'P: /ath/to/block/shapefile/block_shp_name.shp' buffers = 'P: / ath / to / buffer /shapefile/buffer_shp_name.shp 'intersection =' P: /ath/to/intersection/shapefile/intersection.shp 'compact_field =' compactnes 'def createIntersectionFc (): "" "إنشاء فئة ميزة لميزات التقاطع ليتم كتابتها إلى" "" # احصل على المرجع المكاني من فئة ميزة الكتل واستخدم # تحدد تلك السمة للتقاطع fc desc = arcpy. وصف (كتل) srs = desc.spatialReference shp_path = path.dirname (تقاطع) shp_name = path.basename ( intersection) geom_type = إدارة POLYGON. AddField (تقاطع ، حقل مضغوط ، نوع f_type) drop_field = 'Id' manageme nt.DeleteField (التقاطع ، drop_field) def intersectFeatures (): "" "تقاطع هندسة الكتلة والمخازن المؤقتة واكتب النتيجة إلى فئة الميزة" "" geom_mapping = {} الحقول = ['OID @'، 'SHAPE @'] باستخدام da.SearchCursor (الكتل ، الحقول) كمؤشر: لـ oid ، geom in cursor: geom_mapping [oid] = {'block': geom} مع da.SearchCursor (المخازن المؤقتة ، الحقول) كمؤشر: لـ oid ، geom في المؤشر: if oid في geom_mapping: geom_mapping [oid] ['buffer'] = geom else: print 'لا يوجد تطابق كتلة' print 'للمخزن المؤقت باستخدام FID: {0}'. format (oid) i_cursor = da.InsertCursor (تقاطع ، الحقول) لـ oid ، geom_dict في geom_mapping.iteritems (): intersect_geom = geom_dict ['block']. intersect (geom_dict ['buffer'] ، 4) i_cursor.insertRow ((oid، intersect_geom)) del i_cursor defage getBuffer () : "" "احصل على النسبة المئوية لكل منطقة عازلة مكونة من هندسة التقاطع المقابلة لها واكتبها على التقاطع fc" "" area_dict = {} s_fields = ['OID @'، 'SHAPE @ AREA'] مع da. SearchCursor (المخازن المؤقتة ، s_field s) كمؤشر: بالنسبة لـ oid ، المنطقة في المؤشر: area_dict [oid] = area u_fields = s_fields + [compact_field] مع da.UpdateCursor (تقاطع ، u_fields) مثل u_cursor: لـ oid ، area ، Compact in u_cursor: compact = area / area_dict [oid] u_cursor.updateRow ((رقم التعريف الشخصي ، المنطقة ، مضغوط)) createIntersectionFc () intersectFeatures () getBufferPercentage ()

لست متأكدًا مما إذا كنت تستخدم ArcGIS ولكن إذا كنت تستخدمه ، فيمكنك:

  1. انضم إلى المخازن المؤقتة مع الكتل ، واختر الاحتفاظ بالسجلات المطابقة فقط ،
  2. تمنحك الخطوة 1 فقط المخازن المؤقتة التي لها مطابقة fid مع الكتل ، ثم يمكنك تقاطع المخازن المؤقتة الجديدة مع الكتل.

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


شاهد الفيديو: هندسه وصفيه. تعيين نقطة تقابل مستقيم مع مستوي. مسائل الموضع