解析xml修改切片原点绕开工具的坑

1
分享 2018-02-06
我们可以通过工具 Generate Map Server Cache Tiling Scheme 来生成自定义的切片方案,无论是ArcMap还是ArcGIS Pro ,无论是栅格切片还是矢量切片,都屡试不爽。
前段时间,为了方便 ArcGIS Pro 的自动化工作,我尝试用python调用这个功能,然而后面在使用其生成的切片方案(.xml)文件时,会发现切片原点总是默认值,例如地理坐标系统下是“-400,400”。
<TileOrigin xsi:type="typens:PointN">
<X>-400</X><Y>400</Y>
</TileOrigin>
arcpy.GenerateMapServerCacheTilingScheme_server (in_map, tile_origin, output_tiling_scheme, num_of_scales, scales, dots_per_inch, tile_size)
中,tile_origin这个参数标识为point对象,可是无论如何传参都无效。
这样会导致切片创建以及更新的一系列问题,在当时也是排查了很久才定位到这个问题。我的是测试环境是 ArcGIS Pro 2.0.x。值得欣慰的是,这个问题在 ArcMap的arcpy中没有问题,可以正确识别参数。
经过与esri美国工程师的沟通确认,此问题为arcpy for ArcGIS Pro的bug,暂时没有官方解决方法。
  • BUG-000110503 : Changing the tile origin parameter when using arcpy.server.GenerateMapServerCacheTilingScheme does not actually change the tile origin


绕行办法:
既然xml已经生成了,只有切片原点信息是错误,那就自己来解析xml修改对应参数即可。在自己的脚本中额外增加一个解析xml的逻辑吧,跳过这个坑。
import xml.dom.minidom as DOM
# Modify Scheme File to Avoid the tile_Origin Specification Bug of the Pro Tool
def modifyTilingSchemeFile(tileScheme,x_origin,y_origin):
try:
doc = DOM.parse(tileScheme)
tileOriginX = doc.getElementsByTagName('X')
tileOriginY = doc.getElementsByTagName('Y')
tileOriginX[0].firstChild.data = x_origin
tileOriginY[0].firstChild.data = y_origin
f = open(tileScheme, 'w+')
doc.writexml(f)
f.close()
return True
except:
arcpy.AddMessage("tile scheme XML file does not exist.")

文章来源:http://kikitamap.com/2018/02/05/AlterXMLScheme/

1 个评论

发售股份读后感和

要回复文章请先登录注册