"针对在AutoCAD中加载地图存在数据定位操作复杂、数据渲染效率低、无法接入第三方地理信息服务的问题,提出了在AutoCAD中加载OGC标准的网络地图分块服务方法。基于ObjectARX二次开发插件,实现在AutoCAD中加载WMTS服务,兼容了第三方地理信息服务,为网络地图服务加载提供解决方法。基于天地图的应用案例表明:所提方法不仅能加载WMTS地图服务,还能够保证地图位置正确、渲染效率高效、操作简单,研究结果可以应用于地理信息数据生产、规划设计等领域。"
1 引言
利用AutoCAD在地理信息数据生产、规划设计等过程中,需要加载矢量电子地图、遥感影像地图、地形渲染地图等多源数据提供空间参考。张小波[1]、韦胜[2]等提出将数据进行切片处理,生成瓦片地图,再通过编程实现在AutoCAD中读取展示本地瓦片数据;成国辉[4]介绍了在AutoCAD中插入影像图的实现机制,实现了自动加载影像图。这些研究解决了大范围地图快速展示,但是缺乏对地理信息标准服务兼容,无法直接加载第三方地理信息服务,不利于地理信息资源共享和利用。目前地图服务一般采用OGC标准的网络地图分块服务(Web Map Tile Service,WMTS)[5],例如天地图就是通过WMTS提供丰富的地理信息数据资源服务[6],通过在线服务满足用户对基础数据的需求。
本文主要研究在AutoCAD中加载WMTS服务的方法,对WMTS服务进行兼容,解决多源异构型数据集成展示问题,并通过ObjectARX二次开发WMTS地图加载插件(WebMapLoader),将WMTS服务作为参考底图快速应用到实际生产中。本文重点介绍WMTS地图加载更新流程、WMTS服务解析、瓦片计算原理、瓦片获取和加载方法四个方面的内容,并贴出实现核心代码。
2实现方法与关键技术
2.1 WMTS地图加载更新流程
WMTS地图加载、更新流程,如图1所示。通过监听当前文档视图中心点的变化,触发地图加载更新流程。首先,获取当前视口屏幕范围、视图中心点和视口高度,计算左上角坐标和右下角坐标和分辨率,通过瓦片计算模型,计算出瓦片行号、列号、级别,利用并发网络或本地读取获取需要加载的瓦片数据集,加载最新瓦片集数据,最后锁定瓦片图层,完成瓦片地图加载。
图1 瓦片地图加载流程图
2.2 WMTS服务解析
WMTS支持HTTP KVP(Key-Value Pair)、SOAP、REST三种实现模型 。WMTS1.0.0规范了ServiceMetadata(服务元数据)、Tile(瓦片地图)、FeatureInfo(要素信息)三种资源。调用GetCapabilities接口返回服务元数据,包括服务能力和信息内容,利用XmlDocument类解析XML格式的元数据,为计算视图范围内瓦片信息提供必要参数,主要包括ows:BoundingBox节点、ResourceURL节点、TileMatrixSet节点,它们分别是服务范围、资源地址、瓦片矩阵集。瓦片矩阵集包括级别Level、比例尺Scale、瓦片的宽TileWidth和高TileHeight、边界框的左上角坐标(TileMatrixminX,TileMatrixmaxY)、以瓦片为单位来定义的矩阵的宽MatrixWidth和高MatrixHeight。WMTS服务解析关键代码如下:
2.3 瓦片计算原理
首先计算瓦片矩阵集中每层级的地面分辨率Resolution1:
(1)
式中:scale 地图比例尺,为PPI为屏幕分辨率,默认屏幕分辨率是96。
计算当前AutoCAD窗口显示地面分辨率Resolution2,将当前屏幕地图分辨率与瓦片矩阵集中每层级的分辨率Resolution1进行比较,获取最接近的地图层级:
(2)
式中: Viewsize为按图形单位存储当前视口的高度; ScreensizeY 为以像素为单位存储当前视口的高度。
参考WMTS[5]标准,瓦片矩阵中的每个瓦片由瓦片的行(TileRow)列(TileCol)值进行标识,行列值分别从瓦片矩阵左上角点所在的瓦片开始算起,依次向下向右增加。根据当前视图范围计算出左上角(TileMinCol,TileMinRow)和右下角(TileMaxCol,TileMaxRow)瓦片行列号,再遍历出当前视图范围所有瓦片的行列号:
(3)
(4)
(5)
(6)
式中: BoxMinX为当前视图范围最小X; BoxMaxX为当前视图范围最大X; BoxMaxY为当前视图范围最大Y; BoxMinY为当前视图范围最小Y。
2.4 瓦片获取和加载方法
通过瓦片计算模型,计算出当前视图需要加载的瓦片级别、行号、列号参数,根据瓦片资源模板,生成每张瓦片地图地址,采用并发网络或本地读取的方式,获取到瓦片数据集。
AutoCAD的栅格图像是由RasterImageDef类(图像定义对象)和RasterImage类(图像实体)实现。图像实体可以在特定的位置和方向上插入栅格瓦片,同时也可以设置栅格瓦片的对比度、是否透明等图像类属性。图像定义对象负责维护图像文件的链接、栅格图像的显示和打印操作。瓦片加载方法实现关键代码如下:
获取完整工具/源代码请将邮箱发送给作者,并扫码关注“地知通”公众号,订阅更多免费实用工具。
3 应用案例
如图2所示,使用WMTS地图加载插件调用天地图遥感影像地图,应用在1:500DLG测绘工作中,利用WMTS服务加载方法在AutoCAD中快速接入影像地图及其它资料,为前期控制点的布设、后期数据检查和地形要素变化监测提供数据参考。在控制点选定过程中,通过判读影像,了解周边地势情况,远离大面积水域、高层建筑物、高压电线等;在地形图编绘过程中,将野外观测数据与影像地图进行比对,查看数据与影像地图位置差异,方便检查发现数据错误;在地形要素变化监测中,通过影像地图作为底图参考,叠加已有地形图资料,快速判读要素几何图形的变化,为数据更新工作提供技术支撑,提升作业效率。
图2 在AutoCAD中加载天地图遥感影像地图效果
4 结束语
在AutoCAD中加载WMTS数据服务,为AutoCAD在地理信息要素采集、更新、核查等过程中提供了空间参考,解决了多源异构型数据集成展示问题,为网络数据加载提供了解决方法,拓宽了数据来源,并通过插件的方式快速应用到实际生产中,提升了工作效率,具有较高的推广应用价值。