나는 arcpy 기하학을 geojson으로 직렬화하여 나중에 기하학으로 다시 수화 할 수 있고주기에 2 가지 문제가 있습니다. :
문제 1 : 정밀도
R0 = arcpy.SearchCursor(self.shpTest, "FID=0").next().getValue("Shape")
geojson = R0.__geo_interface__
R1 = arcpy.AsShape(geojson)
self.assertTrue(R0.equals(R1)) <<< THIS FAILS
문자열 표현을 확인하면 좌표가 약간 변경되었습니다.
geojson2 = R1.__geo_interface__
print geojson
print geojson2
{'type': 'Polygon', 'coordinates': [[(442343.5516410945, 4814166.6184399202), (442772.17749834526, 4811610.7383281607), (441565.67508534156, 4811499.6131059099), (440772.50052100699, 4814184.7808806188), (442343.5516410945, 4814166.6184399202)]]}
{'type': 'Polygon', 'coordinates': [[(442343.55169677734, 4814166.6185302734), (442772.17749023438, 4811610.73828125), (441565.67510986328, 4811499.6130981445), (440772.50048828125, 4814184.7808837891), (442343.55169677734, 4814166.6185302734)]]}
문제 2 : 구멍 다각형에 구멍이 있으면 geo_interface 에서 오류가 발생합니다.
R0_WithHoles = arcpy.SearchCursor(self.shpTest, "FID=0").next().getValue("Shape")
geojson = R0.__geo_interface__ <<< generates this ERROR:
File "C:\Program Files\ArcGIS\Desktop10.0\arcpy\arcpy\arcobjects\geometries.py", line 68, in __geo_interface__
return {'type': 'Polygon', 'coordinates': [[(pt.X, pt.Y) for pt in part] for part in self]}
AttributeError: 'NoneType' object has no attribute 'X'
이러한 문제를 해결하는 방법에 대한 아이디어가 있습니까?
네, 방금 2 번을 만났습니다. 그리고이 주제에 대해별로 사랑하지 않는 것 같습니다.
—
valveLondon
이것은 ArcGIS 10.1에서 여전히 삐걱 거리고 있습니다. ESRI가 주제에 대해 언급 할 수 있다면 좋을 것입니다.
—
James Mills
나는 첫번째와 두번째 문제를 만났다. 나와 함께 좌표가 변경되지 않는 것처럼 보이지만 (인쇄 할 때) geom1.equals (geom2)는 몇 번만 실패합니다. 왜 그런지 잘 모르겠습니다. 두 번째 문제는 @valveLondon의 제안을 사용하여 수정되었습니다. .equals 수정 방법을 발견 한 경우 공유하십시오.
—
Michalis Avraam
@MichalisAvraam 우리도 같은 문제를 겪고 해결책을 위해 ESRI에 도달했습니다. 알려진 버그 인 것으로 나타났습니다 (투영없이 지오메트리를 만들 때 정밀도가 잘립니다)- 이 질문 도 살펴보십시오 .
—
om_henners 2009
@om_henners 나는 그것을 가정했습니다. 그러나 arcpy.AsShape () 함수를 사용하면 공간 참조를 지정할 수 없습니다. 나는 무언가를하기를 희망하는 모든 환경 변수를 설정했습니다 (출력 좌표 등). 해결책은 ESRI가 정확성에 신경 쓰지 않기 때문에 GeoJSON을 수동으로 디코딩하는 것입니까?
—
Michalis Avraam