두 가지 기능 클래스를 비교하여 차이점을 식별하려고합니다 (일부 diff 함수). 내 기본 워크 플로우 :
- SearchCursor를 사용하여 지오메트리를 추출합니다.
- 수정 된
__geo_interface__
( valveLondon 에서 가져옴return {'type': 'Polygon', 'coordinates': [[((pt.X, pt.Y) if pt else None) for pt in part] for part in self]}
)을 사용하여 두 피쳐 클래스의 형상을 GeoJSON으로 저장하십시오 . 이것은 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 개의 변경 사항을 찾을 것으로 예상되지만 스크립트에는 430 개가 있다고 주장합니다. GeoJSON 표현을 확인하려고 시도했지만 동일하지만 Geometry Class equals ()는 그렇지 않습니다.
예는 다음과 같습니다.
>>> 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
여기서 예상되는 동작은 False가 아닌 True 여야합니다.
내가 모든 것을 ogr 기하학으로 옮기기 전에 어떤 제안이 있습니까? (ogr.CreateGeometryFromGeoJSON ()이 문자열을 기대하고 arcpy 's __geo_interface__
가 사전을 반환하므로 복잡성을 추가하는 것처럼 느낍니다.
다음 질문에 답하지 않아도 도움이되는 다음 자료를 찾아보십시오.
- 내 텍스트에서 위에 링크 된 gis.stackexchange.com의 arcpy.Geometry 질문 입니다.
- arcgis.com 포럼 에서 arcpy의 Polygon 클래스의 오류 (아마도 ArcGIS 10.0에는 이론적으로 10.1에서 수정 된 많은 정밀 오류가 있지만 10.0 SP5에서는 여전히 오류가 있음을 확인할 수 없습니다).