专栏首页智慧城市高质量编码-conf.xml生成TileInfo
原创

高质量编码-conf.xml生成TileInfo

使用Arcgis API时,如果我们要使用地图下载器下载的切片来作为图层服务,可以使用WMTSLayer。

使用WMTSLayer时,需要layerInfo参数,通常自定义的wmts服务如果不是arcgis server发布的,layerInfo参数中还需要tileInfo参数。

WMTSLayer构造函数中需要layerInfo参数
tileInfo中lods参数定义了缩放层级以及各个层级对应的分辨率和比例尺信息
tileInfo作为layerInfo参数,layerInfo作为WMTSLayer参数

通过地图下载器下载的切片可以导出为Arcgis Server缓存瓦片并生成ESRI world file,下载的原始切片和导出的Arcgis Server缓存瓦片都是根据level(缩放级别),row(行),col(列)组织的文件夹目录,只不过两者的组织方式和文件夹名字稍有不同。同时导出Arcgis Server缓存瓦片时会生成conf.xml和conf.ci两个文件,里面定义了tileInfo和fullExtent信息,我们在js中指定WMTSLayer参数时需要使用。

Arcgis Server缓存瓦片以level-row-col组织的图片,同时row和col是以16进制命名
下载的切片目录和Arcgis Server缓存瓦片目录
导出为Arcgis Server缓存瓦片并生成ESRI world file时生成的conf.xml和conf.ci

conf.xml中的瓦片信息
conf.xml中的瓦片信息
conf.cdi文件中时瓦片服务的fullExtent信息,可以提供给layerInfo的fullExtent参数

使用Arcgis API时,通常我们使用WMTSLayer时需要的tileInfo里各个参数是从这个xml文件里得到的,既然这样,何不直接写一个程序,直接根据这个conf.xml文件生成我们的tileInfo Json格式。

Arcgis Server缓存瓦片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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高质量编码-地图弹窗

    此文介绍arcgis js api信息弹窗infoWindow的setContent方法

    MiaoGIS
  • Python解决小需求--网站在线听歌歌词同步到本地

    喜欢工作时听歌,但又想知道唱的是什么,也就是看见歌词,但又要轻量级,不下载客户端音乐软件,于是在豆瓣FM,网易云音乐等在线音乐网站上听歌。

    MiaoGIS
  • 高质量编码-图层管理

    下文我们介绍一下依然配置文件,怎么实现将地图图层的infoWindow(信息弹窗)统一管理起来。

    MiaoGIS
  • PHPStrom 关于配置Apache解析环境80端口问题

    在PHPStrom编译器中,存在着端口号为23643等等端口号,不能自己设置80端口,这个是比较尴尬的,小编在此列举该方式,望大家不要踩坑,希望能够帮助到大家。

    Debug客栈
  • spring bean的作用域

    Bean的作用域 参考:spring FrameWork官方文档 spring4.x中官方有7中作用域,如果使用的是applicationContext作为...

    用户1418372
  • 获取GoogleDrive无限网盘

    3.我们进入到自己的 drive 中后,是只有一个 我的云端硬盘 并且只有15GB的空间

    王荣胜
  • 配置腾讯云监控实现CPU和内存高利用率时触发告警抓住最佳时机上机排查

    问题现象:经常远程不上,需要重启才能远程上,远程不上时查看云监控CPU或内存指标都是接近100%的利用率。

    我爱你的一诺
  • Jenkins2 学习系列13 -- 邮件和Slack通知

    需求:需要把Jenkins的构建情况通过邮件,钉钉,Slack等通知告诉相关的测试,开发人员。 结合之前讲的 post钩子 更进一步可以实现失败时只通知给开发...

    mafeifan
  • DevOps驱动创新

    容器编排: 部署 更新 提供实例 容器发现 监控 调度 伸缩 故障转移 约束管理 政策管理

    用户5760343
  • Docker 介绍

    用户5760343

扫码关注云+社区

领取腾讯云代金券