我正在将arcpy几何序列化为geojson,以便以后可以将它们“水化”为几何形状,并且在周期中遇到两个问题:
问题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'
关于如何解决这些问题的任何想法?
是的,我自己遇到了第二名。似乎并不太喜欢这个话题。
—
valve伦敦2011年
这在ArcGIS 10.1中的arcpy中仍然没有解决-如果ESRI可以对此主题发表评论,那就太好了。
—
James Mills
我遇到了第一个和第二个问题。对于我来说,协调的似乎没有变化(当您打印它们时),但是geom1.equals(geom2)仅使我失败了几次。我不确定为什么也会发生这种情况。使用@valveLondon的建议解决了第二个问题。如果您找到了如何修复.equals的方法,请共享。
—
Michalis Avraam '11年
@MichalisAvraam我们也遇到了同样的问题,并获得了ESRI的解决方案-事实证明这是一个已知的错误(当您创建没有投影的geom时,它会截断精度)- 也请看一下这个问题。
—
om_henners 2012年
@om_henners我以为是。但是arcpy.AsShape()函数不允许您指定空间参考。我已经设置了所有环境变量,希望它能完成某些工作(输出坐标等)。然后解决方案是手动解码GeoJSON,因为ESRI不在乎准确性?
—
Michalis Avraam 2012年