基于地理国情监测数据高效可视化技术研究
2022-04-27雷瑛
雷 瑛
(1.甘肃省基础地理信息中心,甘肃 兰州 730000)
地理国情数据要素的空间表达是基于“所见即所得”的表现形式[9],其矢量要素表达较为细碎和密集,给空间拓扑计算带来指数级内存压力,同时随着数据量的剧增及客户端服务访问需求的加大,会影响服务器端对矢量切片数据的访问性能[1-10]。
针对以上问题,本文结合项目实践,从3个方面改进技术,优化流程,提升矢量地图服务的访问效率,实现地理国情海量空间数据快速高效的展示。
1 矢量切片访问性能提升方法研究
1.1 对空间矢量数据进行空间压缩
空间矢量数据压缩本质上是利用地图综合概念,采用道格拉斯—普克算法(douglas–peucker algo⁃rithm)[11],通过线要素化简方式,有选择性地去掉线上的点,并对其他点进行合理位移,以尽可能地保持曲线的形状特征,最终实现矢量瓦片地图在客户端高效的多尺度渐进式可视化[12-13]。
道格拉斯-普克算法是将曲线近似表示为一系列点,并减少点的数量的一种算法。算法的基本思路是对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值(dmax),用dmax与限差D相比:若dmax<D,这条曲线上的中间点则全部舍去;若dmax≥D,则保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法[14-15]。
1.1.1 设置最大距离值
对线面图形采用道格拉斯-普克算法进行空间压缩,不同地图级别设置不同的最大距离值,如表1所示。最大距离值设置以经纬度坐标系为例说明。
表1 最大距离设置样例
1.1.2 空间数据压缩
压缩方法如下:
1)在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离,如图1a。
图1 空间数据压缩算法
2)选其最大者与阈值相比较,若大于阈值,则离该直线距离最大的点保留,否则将直线两端点间的各点全部舍去,如图1b,第4点保留。
3)依据所保留的点,将已知曲线分成两部分处理,重复第a、b步迭代操作,即仍选距离最大者与阈值比较,依次取舍,直到无点可舍去,最后得到满足给定精度限差的曲线点坐标,如图1c、d依次保留第6点、7点,舍去其他点,即完成线的化简。
1.2 MongoDB集群持久化切片技术
通过访问数据库的方式来实时获取切片数据查询时间较长,将已获取的切片数据通过MongoDB进行缓存处理,以减少数据库访问次数。MongoDB是一个基于分布式文件存储的数据库,与传统文件存储比较,具有高可用的二级索引(文本搜索和地理位置)、高聚合数据分析框架、高性能、存储数据方便、支持查询、使用高效的二进制数据存储、自动处理碎片、文件存储格式为BSON等特点。为了防止单点故障,当发生硬件故障或者其他原因造成的宕机时,需要使用副本进行恢复,建立MongoDB副本集群。
1.2.1 集群架构
不同场景下需要建立不同方式的集群,此处建立副本集群,共3个节点,一个主节点,另外2个副本节点,如图2所示。
图2 集群架构图
1.2.2 地图服务数据集合
将每个地图服务的矢量切片缓存数据存储在MongoDB中的一个数据集合中。集合元素如表2所示。
表2 矢量切片缓存集合元素
1.3 Java-vector-tile-master算法优化
复杂的图形相交时,直接使用Java-vec⁃tor-tile-master开源算法计算切片会出现切片数据错误,导致前端页面渲染出现异常,此时,应对算法进行优化[16],剔除错误情况。
1.3.1 错误情况
由于单张矢量切片的范围是4 096×4 096的矩形面,地理国情监测空间矢量线图形与单张切片矩形范围面相交有可能会出现相交结果为线或者点的情况;地理国情监测空间矢量面图形与切片矩形面相交有可能会出现相交结果为点的情况。如果产生的图形类型与输入的图形类型不一致,会导致前端展示部分切片缺失的情况,如图3所示。
图3 Java-vector-tile-master算法错误情况
1.3.2 源码优化
原始开源代码仅支持单部分要素的处理,不支持多部分要素,如遇到多部分要素,生成的矢量切片数据在前端展示时会出现切片缺失的情况,需修改开源代码以支持多部分要素的情况。
2 实验结果对比与分析
为验证优化效果,选取某县的地表覆盖数据作为测试数据,在相同软硬件环境下,记录优化前和优化后不同级别下单张切片的请求时间、切片大小和前端显示结果来分析优化效果,数据情况见表3。
表3 实验数据说明
通过采用优化前后的2个不同的矢量切片地图服务,在相同的软硬件环境下,对相同的数据调用,客户端的响应时间优化前见表4和图4,优化后见表5和图5。
表4 优化前效率表
图4 优化前效果图
表5 优化后效率
图5 优化后效果图
3 结语
采用Douglas–Peucker算法对地理国情监测空间矢量数据进行压缩,确保空间图形基本形状不变的前提下,剔除图形中多余的点,降低图形的空间大小和空间复杂度,提升了切片计算的效率,降低了切片大小。
采用MongoDB集群持久化切片,将已获取的切片数据进行缓存处理,降低了访问数据库的次数,减少了获取切片的时间,增强了获取切片缓存数据的稳定性。
采用优化后的Java-vector-tile-master算法,剔除图形在复杂相交情况下获取切片数据错误的情况,确保切片数据的正确性,避免了前端页面渲染出现异常的问题。
综上所述,本文针对地理国情监测海量数据高效可视化所提出的优化矢量数据空间压缩算法和Ja⁃va-vector-tile-master算法,结合MongoDB集群持久化切片技术,使得优化后较优化前不同级别请求响应时间提升了50%~80%,不同级别切片大小压缩了35%~60%,极大地提升了矢量瓦片地图的访问效率,实现了客户端海量空间数据的高效可视化。