2022-03-13 18:05阅读: 512评论: 0推荐: 0

03. 一种稠稀矢量瓦片的构建方法

摘要

针对矢量瓦片之间的数据不均衡影响浏览器加载与渲染效率的问题,提出了一种顾及矢量数据空间分布的矢量瓦片构建算法。首先利用平衡树的思想进行数据分割;其次构建顾及要素空间分布的稠稀瓦片并对瓦片进行编号;然后构建四维 Kd 树索引模型;最后开展稠稀矢量瓦片构建与可视化对比试验。试验表明,与传统格网矢量瓦片相比,稠稀矢量瓦片之间的数据量标准差较低,具有瓦片数据均衡性好、响应时间快、加载效率高等优点。

关键词

矢量瓦片; 金字塔; 空间分布; 数据分簇; Kd 树

目前,矢量地图多借助瓦片技术 [1-2] 实现Web 地图渲染展示,矢量瓦片技术主要是将矢量数据分割成预定义大小的瓦片 [3] 进行网络传输。与栅格瓦片[4] 相比,矢量瓦片具有网络带宽消耗小、数据体积小、压缩率高和样式可定制等优势,是未来网络地图的发展趋势。

矢量瓦片技术主要包括矢量数据的空间划分、瓦片编码和调度渲染等流程 [5] 。瓦片空间划分和瓦片编码可分为格网法、稠稀瓦片法和多层次分块法这 3 种方法。格网法通过均匀分布的经纬线网格对矢量数据进行分割 [6] ,形成具有多分辨率金字塔结构[7]的格网矢量瓦片。稠稀瓦片法参考要素的数据权重或数据的空间分布来构建
稠稀瓦片[8-9] 。文献[8]提出了一种参照数据权重和要素重要度的瓦片划分与组织模型,该模型构建的瓦片数据均衡,但存在相邻瓦片之间要素重叠的局限。文献[9]提出了基于簇模型的瓦片模型,该模型考虑了要素的空间分布,瓦片数据量基本一致,但存在分片过细和并发过多的局限。多层次分块法基于层次增量分块矢量模型 [10],对瓦片按点、线、面类型进行再分层。该模型利于网络传输,但是破坏了单个瓦片的整体性,增加了并
发请求数目。

矢量瓦片的组织、编码索引、存储与渲染是影响瓦片效率的关键因素 [11-12] 。由于矢量要素的空间分布不均,因此传统格网矢量瓦片间的数据大小不均衡,影响了前端加载渲染效率与并发一致性。综上,提出一种顾及矢量数据空间分布密度的矢量瓦片构建方法。该方法借助空间索引平衡树[13] 构建矢量瓦片,建立瓦片编号与索引并使用 Kd 树进行查询,以此提高瓦片的网络传输性能。并以资源三号镶嵌线数据为例,开展矢量瓦片前端加载性能对比试验。

1. 稠稀瓦片算法依据

对于海量瓦片,需要先标识每一个瓦片,以此为基础建立相应的瓦片组织与索引模型。

1.1 矢量瓦片的空间划分

空间划分是将矢量数据按规则分割为较小的数据块,不同的空间划分方法会影响瓦片索引的选择和单个瓦片的数据量,进而影响网络传输效率。矢量瓦片多采用均匀分布的格网分割法,将矢量数据分割成一个个数据块,每个数据块以文件形式单独存储,常用的瓦片存储格式有 MVT、Pbf 和 geojson 等。

1.2 基于 Kd 树的瓦片索引模型

Kd 树最早由 Bentley 提出[14] ,是一种检索 K维空间点的二叉树。基于二维平面的 Kd 树的基本原理是对于在该二维平面上的所有坐标点,统计它们在两个维度上的数据方差。方差最大的维度就是分割域,坐标点集按照该分割域进行排序,中间值被选为分割线,将该域分为左右子空间。在子空间上继续以上操作直到满足要求。

Kd 树要求用平行于坐标轴的纵横分界线将平面分成若干区域,使每个区域中的点数不超过某一值。Kd 树构建流程如图 1 所示。

2. 稠稀瓦片构建方法

稠稀矢量瓦片要求对矢量数据进行空间划分,得到数据量均衡的矢量瓦片。稠稀瓦片构建的关键问题包括瓦片的空间划分与瓦片构建。瓦片的空间划分是使用已经确定好的划分面,对点、线、面不同矢量数据分别进行裁切,然后合并为geojson 格式的稠稀瓦片。

2.1 空间划分方案

稠稀瓦片空间划分需要保持同层级下瓦片之间数据量的均衡,同时确定不同瓦片层级下的瓦片数目。算法核心是依据矢量数据的空间分布确定稠稀瓦片分割方案。矢量数据包括属性数据与几何数据,属性数据依附于几何数据,故属性数据也存在一定的空间聚集特性。属性数据的空间分布特性与矢量要素类型有关。对于点要素,其属性的空间分布与几何要素的空间分布呈正相关;对于线、面要素,其由多个坐标单位构成,情况较为复杂,暂不考虑属性值的影响。稠稀瓦片分割方案是首先获得待分割矢量数据的坐标点集合并进行分区操作;将集合中的坐标按照规则划分成两部分;对划分结果重复以上步骤,直到满足要求结束递归,得到划分好的空瓦片;以空瓦片为基础对矢量数据进行裁切与合并操作,最终得到稠稀矢量瓦片。具体步骤如下。

  1. 确定瓦片层级。在瓦片构建时确定每一层级瓦片数量,瓦片层级一般为 0~23 级。设级数为 n,则第 n 级瓦片数为 4 n ,稠稀矢量瓦片每一层级瓦片数量为前一层级的 4 倍。

  2. 瓦片划分方案。坐标集合构成了一个二维平面。如果该集合中纵坐标方向方差最大,则将平行于横轴的横向线作为起始分割方向。记录该层级纵坐标方向中位数,该中位数将二维平面分成点数相等的两部分子空间集合 d 1 和 d 2 ,第 0层级的划分结束。以 d 1 和 d 2 为新的集合进行递归操作,直到满足划分层级,递归结束。图 2 为德国德累斯顿市建筑区的空间划分。

2.2 瓦片构建方法

  1. 确定 h 的初始值。以 D 为基础,分别计算经度方向和纬度方向的方差大小,将方差较大的方向作为初始分割方向。若方向为经度方向,则h=0,得到中位数 Y,y=Y 为分割线;若方向为纬度方向,则 h=1,得到 X,x=X 为分割线。

  2. 分割。在分割方向上将坐标集合 D 以分割线为界划分为左子空间集合 D L 和右子空间集合 D R ,得到均分空间 D 的中位数。同时 DL 编号N L 末尾增加一位 0,变为 00;D R 编号 N R 末尾增加一位 1,变为 01,两者都为二进制码。

  3. 递归。每划分一次,h 就增加 1。对子空间集合选择经度或纬度方向轮流进行划分,得到划分中位数 X、Y 和左右子空间 D L 、D R ,左右子空间编号末尾增加 0 和 1。

  4. 递归结束。若 h≤2l,则递归结束,得到由中位数分割点构成的分割区域。对完成抽稀的矢量数据进行分割,得到稠稀矢量瓦片。

稠稀矢量瓦片构建算法如图 3 所示。

3. 瓦片组织方法

完成空间划分的稠稀矢量瓦片数量巨大,需要建立高效的索引,确定索引与瓦片编号以及缩放级别的数学关系。这就需要对每一个瓦片建立唯一标识码,构建海量瓦片的空间索引模型,以进行瓦片的存储与查询。

3.1 瓦片编号

将稠稀矢量瓦片存放在本地文件系统中,矢量瓦片的层级作为目录。在稠稀矢量瓦片构建时将层级目录下的每一个层级瓦片进行索引编号。瓦片编号方法如下。

  1. 在上节的稠稀矢量瓦片构建方法中,可知N 为构建递归操作中的 D L 的编号 N L 或 D R 的编号 N R ,其初始码为 0。第 1 次递归 N 的位数将增加 1 位,左子节点 N 变为二进制码 00,右子节点N 变为二进制码 01。稠稀矢量瓦片构建时二进制码的变化规则如图 4 所示,树的第 1 层表示第0 层级的 N 编号。

  1. 在稠稀瓦片构建递归结束后,获得一系列不同位数的二进制码 N,如图 5 所示。若 N = 4^h(h 为分割深度),将 N 转为十进制数值 I,将 I 作为矢量瓦片的文件名。

图5 所示为第1、2 层级的 N 编号在分割区域上的分布情况。将 N 按照其十进制码 I 的大小进行连接,得到类似于 Z 曲线[15] 的 N 值分布。由 Z曲线的空间临近特性可知,数值相近的编号表示其地理位置相近,因此 I 值也有类似的空间分布特性。

3.2 瓦片的索引查询

当浏览器请求地图服务时,前端引擎会先获取视窗的实际地理范围,然后解析出该地理范围内瓦片索引号并发送请求至后台服务器,服务器将相应的矢量瓦片发送至前端供其逐一加载渲染。基于各层级矢量瓦片的顶点坐标、索引号和瓦片层级(L o ,L a ,l,L)构建四维 Kd 树,将视窗地理范围和瓦片层级作为输入量,利用四维 Kd 树进行范围查询瓦片,Web 端进行网络加载传输。

4. 试验分析

矢量瓦片的效率由查询调用、网络传输和符号化等部分组成。本文对前两者进行研究与验证。由于符号化渲染涉及到各瓦片在网页端的无缝拼接与渲染引擎选择,因此在试验中需要排除无关因素的干扰。

在实际试验中,对于传统格网矢量瓦片与本文稠稀矢量瓦片,使用 OpenLayer 直接加载,默认点、线、面为蓝色,保持数据源和浏览器一致。首先构建稠稀矢量瓦片与格网矢量瓦片,进行瓦片的加载与显示、缩放、平移等试验操作,并在此基础上对比两者在瓦片数据均衡程度、网络传输效率和瓦片加载渲染效率上的优劣。试验的矢量瓦
片基于 geojson,每一个矢量瓦片是一个单独的geojson 文件,包含点、线、面多个图层。

4.1 试验数据与测试环境

试验数据采用资源三号卫星影像全国覆盖范围 2015 版镶嵌线成果数据。试验坐标系采用CGCS2000,数据类型为 shapefile 面数据,一共有19 207 条记录,数据包括景号、卫星名称等属性数据和几何数据,数据量为 193.4 Mb。将矢量数据进行坐标系转换,转为 WGS1984 投影系。程序语言为 Java 1.8,使用开源库 GDAL 2.0,前端使用OpenLayers 4.6。

测试环境为联想台式机处理器 Intel(R)Core(TM)i7-870 CPU 2.93 GHz,内存16 Gb;操作系统为 Windows 764 位;Web 服务器为 Tomcat 8.5;开发平台为 Myeclipse;浏览器为 Chrome 67.0。将获取的 15 461 张 0~6 层级的瓦片进行预处理,得到由其顶点纵横坐标、索引号和瓦片层级构成的四维 Kd 树。设计一个 600 像素 ×800 像素大小的范围,用来模拟浏览器视窗显示数据。

4.2 瓦片效率测试

4.2.1 不同索引类型瓦片数据对比

瓦片数据情况如表 1 所示。两种瓦片同一层级下数据量标准差对比如图 6 所示。

对于稠稀矢量瓦片,如 2.1 节所述,由于属性数据的存在,稠稀矢量瓦片之间的数据存在较小的差异;而传统格网瓦片的几何数据与属性数据都存在空间分布差异性,极易造成瓦片数据量的不均衡。因此,相比于传统的格网瓦片划分方式,稠稀矢量瓦片之间的数据量差异更小,分布更均衡,在网络传输时能保持一致的加载时间。

4.2.2 同一地理范围查询

为了尽量降低浏览器和机器性能变化所带来的影响,同一地理空间范围内对不同级别瓦片进行 15 次加载,得到两种瓦片在同一层级下每次加载所需的时间。同一地理范围两种瓦片时间加载和加载数据总量对比如图 7 所示。

由图 7 可以看出,两种类型瓦片数据加载量基本一致,每一层级加载的瓦片数相同。由图 6可知,传统格网瓦片之间数据标准差差异很大,瓦片数据量的差异较高,Web 端加载时会使某一网络传输线程耗时较多,增加了整体瓦片的总加载时间;但是稠稀瓦片在总数据量、瓦片数与前者基本一致的条件下瓦片大小更为均衡,网络传输线程与渲染耗时更短,因此稠稀矢量瓦片加载耗时更短,说明稠稀矢量瓦片前端加载效率更高。

4.2.3 同一窗口查询性能

针对稠稀瓦片的疏密特性,随机选择 10 个不重叠视窗进行窗口查询。同一窗口范围内对两种瓦片分别进行 15 次加载,得到不同层级下瓦片加载耗时与加载数。同一窗口范围不同层级下两种瓦片加载数与加载时间对比如图 8 所示。

由图 8 可以看出,不同层级下格网矢量瓦片加载数差异很小,每次加载瓦片数基本为 6;而稠稀矢量瓦片在数据密集区加载的瓦片数较多,在稀疏区加载的瓦片数较少,瓦片数为 4~17,普遍多于格网矢量瓦片加载数。由于在视窗范围内两者所加载的总数据量基本相同,因此稠稀矢量瓦片加载耗时小于格网矢量瓦片,说明稠稀矢量瓦片加载效率较传统格网瓦片更好一些。

通过以上试验,可以得到如下两点结论。

  1. 稠稀矢量瓦片的数据量平衡性高于格网矢量瓦片,同一比例尺层级下瓦片之间数据偏差更小,在网络传输和浏览器加载显示上更具优势。
  2. 实际应用更广泛的窗口查询上,稠稀矢量瓦片也优于格网矢量瓦片。稠稀矢量瓦片随着视窗改变其加载的瓦片数也不断改变,在网络传输端耗时优于格网瓦片,但是在渲染时耗时比格网瓦片稍多。

5. 结论

针对现今矢量瓦片查询调用和网络传输的局限,提出了一种稠稀矢量瓦片构建方法。通过构建稠稀矢量瓦片,进行瓦片编号并借助 Kd 树索引查询,与格网矢量瓦片相比,在瓦片数据的均衡性上有较好的效果,在网络传输上具有基本一致的网络传输时间,在渲染时间上略有差别。

本文为矢量瓦片的研究应用提供了一个新的思路,考虑了矢量数据中几何数据的聚集特性,降低了稠稀矢量瓦片构建的难度。但算法要花大量时间对矢量数据的空间坐标点做排序分割,导致数据量越大,算法耗时越高。在接下来的研究中,考虑使用 MapReduce 模型进行改进,提高矢量瓦片的构建效率。

本文作者:风帆远航

本文链接:https://www.cnblogs.com/flying-birds-xyg/p/16001228.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   风帆远航  阅读(512)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.