मैं उन दोनों के बीच अंतर की पहचान करने के लिए दो अलग-अलग फीचर वर्गों की तुलना करने की कोशिश कर रहा हूं (एक अलग फ़ंक्शन के प्रकार)। मेरा मूल वर्कफ़्लो:
- मैं SearchCursor का उपयोग करके ज्यामिति निकालता हूं
- दो फीचर वर्गों की ज्यामिति को जेजोन के रूप में एक संशोधित
__geo_interface__
( वाल्वलॉन्डन से प्राप्तreturn {'type': 'Polygon', 'coordinates': [[((pt.X, pt.Y) if pt else None) for pt in part] for part in self]}
) के रूप में सहेजें । यह साझा ज्यामिति ऑब्जेक्ट से बचने के लिए है जो ईएसआरआई कर्सर के साथ उपयोग करता है और गहरी प्रतियां बनाने में असमर्थता है (इसके बारे में यहाँ कुछ चर्चा gis.stackexchange के बारे में बात करते हैं)। - एक विशिष्ट पहचानकर्ता के आधार पर दो फ़ीचर वर्गों की ज्यामितीय जाँच करें। उदाहरण के लिए, FC2 OID1 ज्यामिति के साथ FC1 OID1 ज्यामिति की तुलना करें। ईएसआरआई ऑब्जेक्ट उदाहरण के रूप में ज्यामिति प्राप्त करने के लिए, कॉल
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 बदलावों को खोजने की उम्मीद करता हूं, लेकिन मेरी स्क्रिप्ट में जोर है कि 430 हैं। मैंने उन जियोजोन अभ्यावेदन की जांच करने की कोशिश की और वे समान हैं, फिर भी ज्यामिति वर्ग बराबर () ऐसा कहने से इनकार करता है।
एक उदाहरण नीचे है:
>>> 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 geometries के लिए सब कुछ ले जाने से पहले किसी को कोई सुझाव है? (मैं ogr.CreateGeometryFromGeoJSON के रूप में झिझक रहा हूं) () एक स्ट्रिंग की उम्मीद करता है, और आर्कपी __geo_interface__
एक शब्दकोश देता है और मुझे लगता है कि मैं अतिरिक्त जटिलता जोड़ रहा हूं)।
निम्नलिखित संसाधनों से मदद मिली, भले ही वे इस सवाल का जवाब न दें:
- यहाँ पर gis.stackexchange.com पर arcpy.Geometry सवाल है जो मेरे पाठ में ऊपर लिंक किया गया था।
- आर्कगिस.कॉम फ़ोरम से आर्कपी के बहुभुज वर्ग में त्रुटियां (स्पष्ट रूप से आर्कगिस 10.0 में बहुत अधिक सटीक त्रुटियां हैं जो सैद्धांतिक रूप से 10.1 में तय हुईं, लेकिन मैं यह सत्यापित नहीं कर सकता कि 10.0 एसपी 5 में आपको अभी भी त्रुटि मिलती है)।