Aralarındaki farkları (diff fonksiyonu tür) tanımlamak için iki ayrı özellik sınıfları karşılaştırmaya çalışıyorum. Temel iş akışım:
- Bir SearchCursor kullanarak geometrileri çıkarıyorum
- Değiştirilmiş
__geo_interface__
( valveLondon'danreturn {'type': 'Polygon', 'coordinates': [[((pt.X, pt.Y) if pt else None) for pt in part] for part in self]}
) kullanarak iki özellik sınıfının geometrilerini GeoJSON olarak kaydedin . Bunun amacı, ESRI'nin imleçlerle kullandığı paylaşılan geometri nesnesinden ve derin kopyalar yapamamaktan kaçınmaktır (gis.stackexchange ile ilgili bazı tartışmalar bunun hakkında konuşur). - Benzersiz bir tanımlayıcıya dayalı olarak iki özellik sınıfının geometrilerini kontrol edin. Örneğin, FC1 OID1 geometrisini FC2 OID1 geometrisiyle karşılaştırın. Bir ESRI nesne, örneğin, çağrı olarak geometri elde etmek için
arcpy.AsShape()
(deliklerin (yukarıdaki noktası 2 ye bakınız) ile çokgenler değiştirilmiştirreturn cls(Array([map(lambda p: Point(*p) if p is not None else Point(), part) for part in coordinates]))
. Sadece karşılaştırma olduğugeom1.equals(geom2)
şekilde belirtilen geometri sınıfı .
Geometrilerde ~ 140 değişiklik bulmayı bekliyorum, ama senaryom 430 olduğu konusunda ısrar ediyor. Bu GeoJSON temsillerini kontrol etmeye çalıştım ve aynılar, ancak Geometry Sınıfı eşittir () bunu reddetti.
Aşağıda bir örnek verilmiştir:
>>> 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
Burada beklenen davranış Doğru (Yanlış değil) olmalıdır.
Her şeyi ogr geometrilerine taşımadan önce herhangi bir öneriniz var mı? (Ben ogr.CreateGeometryFromGeoJSON () bir dize bekliyor gibi tereddüt ve arcpy's __geo_interface__
bir sözlük döndürür ve ekstra karmaşıklık ekliyorum gibi hissediyorum).
Soruyu cevaplamasalar bile aşağıdaki kaynakları yararlı buldular:
- arcpy.Geometri sorusu , yukarıda metnimde bağlantılı olan gis.stackexchange.com adresinde.
- Arcgis.com forumlarından arcpy'nin Polygon sınıfındaki hatalar (görünüşe göre 10.1'de teorik olarak düzeltilen ArcGIS 10.0'da çok fazla hassas hata var, ancak 10.0 SP5'te hala hatayı aldığınızı doğrulayamıyorum).