使用Arcgis API时,如果我们要使用地图下载器下载的切片来作为图层服务,可以使用WMTSLayer。
使用WMTSLayer时,需要layerInfo参数,通常自定义的wmts服务如果不是arcgis server发布的,layerInfo参数中还需要tileInfo参数。
通过地图下载器下载的切片可以导出为Arcgis Server缓存瓦片并生成ESRI world file,下载的原始切片和导出的Arcgis Server缓存瓦片都是根据level(缩放级别),row(行),col(列)组织的文件夹目录,只不过两者的组织方式和文件夹名字稍有不同。同时导出Arcgis Server缓存瓦片时会生成conf.xml和conf.ci两个文件,里面定义了tileInfo和fullExtent信息,我们在js中指定WMTSLayer参数时需要使用。
使用Arcgis API时,通常我们使用WMTSLayer时需要的tileInfo里各个参数是从这个xml文件里得到的,既然这样,何不直接写一个程序,直接根据这个conf.xml文件生成我们的tileInfo Json格式。
使用Python的xml.etree.ElementTree库实现XML解析
import xml.etree.ElementTree as ET
def genTileInfo(xmlPath,levelPrefix):
root=ET.parse(xmlPath)
dpi=root.find('TileCacheInfo/DPI').text
imageFormat=root.find('TileImageInfo/CacheTileFormat').text
compressionQuality=root.find('TileImageInfo/CompressionQuality').text
spatialReference=root.find('TileCacheInfo/SpatialReference/WKID').text
xOrigin=root.find('TileCacheInfo/TileOrigin/X').text
yOrigin=root.find('TileCacheInfo/TileOrigin/Y').text
rows=root.find('TileCacheInfo/TileRows').text
cols=root.find('TileCacheInfo/TileCols').text
levelInfos=root.findall('TileCacheInfo/LODInfos/LODInfo')
levelInfos=map(lambda x:{"level": levelPrefix+x.find('LevelID').text,"scale": float(x.find('Scale').text),"resolution": float(x.find('Resolution').text)},levelInfos)
tileInfo={
"dpi": int(dpi),
"format": "image/%s"%imageFormat.lower(),
"compressionQuality": int(compressionQuality),
"spatialReference": int(spatialReference),
"rows": int(rows),
"cols": int(rows),
"origin": {
"x": float(xOrigin),
"y": float(yOrigin)
},
"lods": list(levelInfos)
}
return tileInfo
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。