ฉันพยายามเปรียบเทียบสองฟีเจอร์แยกต่างหากเพื่อระบุความแตกต่างระหว่างคลาสเหล่านั้น (เรียงลำดับของฟังก์ชั่น diff) เวิร์กโฟลว์พื้นฐานของฉัน:
- ฉันแยกรูปทรงเรขาคณิตโดยใช้SearchCursor
- บันทึกรูปทรงเรขาคณิตของสองฟีเจอร์คลาสเป็น GeoJSON โดยใช้การแก้ไข
__geo_interface__
(ได้มาจากvalveLondonreturn {'type': 'Polygon', 'coordinates': [[((pt.X, pt.Y) if pt else None) for pt in part] for part in self]}
) นี่คือเพื่อหลีกเลี่ยงวัตถุเรขาคณิตที่ใช้ร่วมกันที่ ESRI ใช้กับเคอร์เซอร์และไม่สามารถทำสำเนาลึก ๆ (การสนทนาบางอย่างที่นี่ใน gis.stackexchange พูดถึงมัน) - ตรวจสอบรูปทรงเรขาคณิตของคลาสฟีเจอร์สองคลาสตามตัวระบุเฉพาะ ตัวอย่างเช่นเปรียบเทียบเรขาคณิต FC1 OID1 กับเรขาคณิต FC2 OID1 เพื่อให้ได้รูปทรงเรขาคณิตเป็น ESRI ตัวอย่างวัตถุโทร
arcpy.AsShape()
(แก้ไขการอ่านรูปหลายเหลี่ยมที่มีรู (ดูจุดที่ 2 ข้างต้น) กับreturn cls(Array([map(lambda p: Point(*p) if p is not None else Point(), part) for part in coordinates]))
. การเปรียบเทียบเป็นเพียงการgeom1.equals(geom2)
ตามที่ระบุไว้ในชั้นเรขาคณิต
ฉันคาดหวังว่าจะพบการเปลี่ยนแปลงรูปทรงเรขาคณิตประมาณ 140 ~ 140 รายการ แต่สคริปต์ของฉันยืนยันว่ามี 430 ฉันพยายามตรวจสอบการเป็นตัวแทน GeoJSON เหล่านั้นและพวกเขาเหมือนกัน แต่ Geometry Class เท่ากับ () ปฏิเสธที่จะพูดอย่างนั้น
ตัวอย่างด้านล่าง:
>>> geom1geoJSON
{'type': 'Polygon', 'coordinates': [[(-122.8423481559999, 47.060497293000083), (-122.84239755599992, 47.059262423000064), (-122.84416913599989, 47.059309693000046), (-122.84416913599989, 47.060497293000083), (-122.8423481559999, 47.060497293000083)]]}
>>> geom2geoJSON
{'type': 'Polygon', 'coordinates': [[(-122.8423481559999, 47.060497293000083), (-122.84239755599992, 47.059262423000064), (-122.84416913599989, 47.059309693000046), (-122.84416913599989, 47.060497293000083), (-122.8423481559999, 47.060497293000083)]]}
>>> geom1 = arcpy.AsShape(geom1geoJSON)
>>> geom2 = arcpy.AsShape(geom2geoJSON)
>>> geom1.equals(geom2)
False
>>> geom2.equals(geom1)
False
พฤติกรรมที่คาดหวังที่นี่ควรเป็นจริง (ไม่ใช่เท็จ)
ใครบ้างมีคำแนะนำก่อนที่ฉันจะย้ายทุกอย่างไปยังรูปทรงเรขาคณิตของ ogr? (ฉันลังเลในฐานะ ogr.CreateGeometryFromGeoJSON () คาดว่าจะมีสตริงและ arcpy __geo_interface__
ส่งคืนพจนานุกรมและฉันรู้สึกว่าฉันกำลังเพิ่มความซับซ้อนเป็นพิเศษ)
พบแหล่งข้อมูลต่อไปนี้ที่เป็นประโยชน์แม้ว่าพวกเขาจะไม่ตอบคำถาม:
- คำถาม arcpy.Geometryที่นี่ใน gis.stackexchange.com ซึ่งเชื่อมโยงข้างต้นในข้อความของฉัน
- ข้อผิดพลาดในระดับรูปหลายเหลี่ยมของ arcpyจากฟอรัม arcgis.com (เห็นได้ชัดว่ามีข้อผิดพลาดความแม่นยำจำนวนมากใน ArcGIS 10.0 ซึ่งในทางทฤษฎีได้รับการแก้ไขใน 10.1 แต่ฉันไม่สามารถตรวจสอบได้ใน 10.0 SP5 คุณยังได้รับข้อผิดพลาด)