Je sérialise mes géométries arcpy en tant que geojson afin de pouvoir les `` hydrater '' plus tard en tant que géométries et j'ai 2 problèmes dans le cycle .:
PROBLÈME 1: Précision
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 je vérifie la représentation des chaînes, les coordonnées ont légèrement changé:
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)]]}
PROBLÈME 2: trous Si le polygone a des trous, geo_interface génère une erreur:
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'
Avez-vous des idées sur la façon de résoudre ces problèmes?
arcpy
geojson
attributeerror
Víctor Velarde
la source
la source
Réponses:
OK - eh bien je pensais l'avoir résolu.
remplacez la ligne ~ 80 de ce fichier C: \ Python26 \ ArcGIS10.0 \ Lib \ arcpy \ arcobjects \ geometries.py à partir de ceci:
à cela (ou quelque chose qui est plus concis et élégant et fait la même chose):
Fondamentalement, ils ont oublié de considérer les beignets dans la forme qui sont marqués par des valeurs de point nul. Cela crache un bon geoJson (parties séparées) mais la méthode arcpy.AsShape supprime GeoJSON.
ce code:
sort ceci:
J'abandonne. ;)
Mise à jour Le problème des trous a été résolu à 10.1 avec ce morceau de python:
la source
C:\Program Files\ArcGIS\Server\arcpy\arcpy\arcobjects\geometries.py
à jour à 10.1, mais si vous êtes à 10.0, vous pouvez le corriger vous-même..py
fichier. Je pensais que cela en faisait un service pack pour 10 mais je suppose que non.