Estoy serializando mis geometrías arcpy como geojson para poder 'hidratarlas' como geometrías más tarde y tengo 2 problemas en el ciclo .:
PROBLEMA 1: Precisión
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
Si verifico la representación de la cadena, las coordenadas han cambiado ligeramente:
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)]]}
PROBLEMA 2: agujeros Si el polígono tiene agujeros, geo_interface genera un error:
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'
¿Alguna idea sobre cómo resolver estos problemas?
arcpy
geojson
attributeerror
Víctor Velarde
fuente
fuente
Respuestas:
OK, bueno, pensé que lo había resuelto.
reemplace la línea ~ 80 de este archivo C: \ Python26 \ ArcGIS10.0 \ Lib \ arcpy \ arcobjects \ geometries.py de esto:
a esto (o algo que es más conciso y elegante y hace lo mismo):
Básicamente se olvidaron de considerar donas en la forma que están marcadas por valores de punto nulo. Esto arroja un buen geoJson (partes separadas) pero el método arcpy.AsShape destruye GeoJSON.
este codigo:
produce esto:
Me rindo. ;)
Actualización El problema de agujeros se resolvió en 10.1 con este fragmento de python:
fuente
C:\Program Files\ArcGIS\Server\arcpy\arcpy\arcobjects\geometries.py
en 10.1 pero si está en 10.0 puede solucionarlo usted mismo..py
archivo. Pensé que se convirtió en un paquete de servicio para 10, pero supongo que no.