07. 矢量电子地图瓦片制作性能评估与应用
摘要
针对大众 GIS 应用与服务对在线地图表达和性能要求越来越高,矢量瓦片成为地图引擎的首选,该文从地图矢量切片模型、编码规则、技术流程与跨平台应用研究等多角度,以主流的切片工具 Mapbox Studio 、 GeoServer 、 ArcGIS Pro 为例,对不同的地图矢量切片方案,从自定义矢量制图、切片环境、切片机制等方面进行了定性定量对比分析。结果表明:不同切片工具由于其切片环境和机制的不同,切片效率各有不同,适用于各自不同的应用场景,为在线网络地图引擎设计、开发和应用提供了技术参考。同时,该文提出通过自定义微服务网关的方式实现多套矢量瓦片服务对应多客户端调用需求,实现矢量瓦片跨平台应用。
关键词
网络地图服务;矢量瓦片;切片编码;切片性能
0. 引言
随着互联网时代的飞速发展和人们生活水平的不断提高,传统纸质地图已经慢慢退出历史舞台,电子地图已经成为人们工作和生活不可缺少的重要工具,从出差远行到生活购物,对地图的应用无处不在。地图瓦片的出现,使得谷歌、高德、百度地图等地图产品迅速发展壮大,通过金字塔模型生成的栅格瓦片数据,提高了地图的影响速度,大大改善了地图实用性。随着技术的不断发展,地图调用不再拘泥于原始的预先生成的栅格瓦片,矢量瓦片开始兴起,充分利用前端渲染的灵活性和交互性,矢量瓦片成为当前地图应用的热点 [1 - 2 ] 。
目前,关于矢量瓦片的研究并不十分成熟,相关标准并不统一,其应用尤其在专业应用方面也并不十分广泛。文献 [3 ]基于网络的矢量瓦片技术研究,指出了矢量瓦片地图在交互性、渲染效果方面的优势,但是对于离线环境下的应用并未研究。文献 [4 ]通过开发在线交互可视化工具,对矢量瓦片的动态可视化渲染进行了深入研究,丰富和简便了地图可视化表达。文献 [5 ]针对矢量瓦片的点状要素注记处理也进行了深入研究,解决了动态渲染过程中传统注记压盖问题。文献 [6 ]基于 Mapbox对矢量瓦片数据组织、编码规则等关键技术进行了深入研究。文献 [7 ]基于 Mapbox矢量瓦片的应用也做了较为深入的开发研究。
本文对当前主流的矢量瓦片解决方案进行了
深入归纳和探讨,并对各解决方案进行了实验测
试和优劣势对比分 析,提 出 一 种 跨 平 台 使 用 方
法,为地理信息开发者使用矢量瓦片服务提供了
参考。
1. 矢量切片
当前,电子地图瓦片主要分为栅格瓦片和矢量瓦片,但随着地图数据更新频率的提升,传统栅格瓦片地图由于切片速度慢、不易更新等问题日益凸显,使得矢量瓦片的应用越来越受到用户的青睐。
如表1所示,在切片大小方面,矢量切片有较大的优势;以青岛全市域现状电子地图为例,采用栅格瓦片切图, 9~20级全瓦片总量约36.5GB ,切片时间需3~5d ,且对存储空间、网络带宽的占用非常大;而同样范围矢量瓦片包有200 MB左右,约200倍的压缩空间,不到1h即可完成切片任务。视网膜屏幕是苹果公司推出的分辨率超过人眼识别极限的高分辨率屏幕,对于在客户端渲染的矢量切片,其显示效果更好。
目前,互联网地图服务商除了BingMap 、搜狗地图、 OpenStreetMap 仍然使用栅格瓦片服务外,百度、高德、谷歌地图已经全面采用矢量瓦片引擎作为优选地图渲染引擎。
1.1 矢量瓦片原理
传统栅格瓦片切片原理是以四叉树金字塔模型直接切割地图图片,最终表现为金字塔分层的256像素×256像素的 PNG 图片,或相应的基于图片的压缩包格式。矢量瓦片切片原理同样是基于四叉 树 金 字塔 模 型,不 过,切 割 的 不 再 是 栅格图片,而 是矢 量 数 据 的 描 述 性 文 件,存 储 的是投影范 围 内 所 属的 几何信息和 属 性 信 息,表现为矢量 瓦 片 能 力文 档,最 终客户 端 根 据 地 图显示范围 从 服 务 器获 取相应的矢 量 信 息,通 过读取图层的样式文件style在客户端实现地图的实时绘制 [8 - 11 ](图1)。
1.2 矢量切片格式
当前应用较广的存储格式主要有 GeoJSON 、TopoJSON和 Google Protocol Buffers ( PBF )。GeoJSON是一种对各种地理数据结构进行编码的格式,基于JavaScript对象表示法的地理空间信息数据交换格式。 GeoJSON对象可以表示几何、特征或者特征集合。 GeoJSON支持下面几何类型:点、线、 面、 多 点、 多 线、 多 面 和 几 何 集 合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征 [12 - 13 ] 。 GeoJSON 易读性好、但冗余度最大,几乎所有主流的 GIS引擎都支持 GeoJSON格式动态渲染电子地图数据。
TopoJSON是 GeoJSON 按拓扑学编码后的扩展形式,相比 GeoJSON 直接使用 Polygon 、 Point之类的几何体来表示图形的方法, TopoJSON 中的每一个几何体都是通过将共享边(被称为arcs )整合后组成的。由于 TopoJSON 边界线只记录一次,地理坐标使用整数不使用浮点数,因此大幅消除了冗余,文件大小缩小了80% 。但 TopoJSON 易读性较差,需要专门工具根据规则进行转换,支持该格式的软件并不多,其中最著名的是目前开源 Web三维的代表CesiumJS[ 14 ] 。Google Protocol Buffers是一种节省存储空间的矢量瓦片数据编码格式,是兼容多语言、多平台、易扩展的数据序列化格式,这种格式应用于客户端或服务端高效渲染或查询要素信息。依据其标准制作的矢量瓦片标准目前几乎成为矢量瓦片的行业标准,当前主流的 Mapbox采用的矢量瓦片 就 是 基 于 PBF 编 码 [15 - 16 ] , 超 图、 ArcGIS OpenLayers 、 GeoServer都支持该种格式。
目前,百度、高德、谷歌等都采用自定义瓦片格式,本文不做重点介绍。
1.3 矢量瓦片编码
1.3.1 几何图形编码
GeoJSON和 TopoJSON 中,矢量瓦片中的几何数据记录的都是原始的坐标。对于 PBF编码方
案,矢量瓦片中的几何数据被定义为屏幕坐标系。以瓦片的左上角定义为(显示默认如此)坐标系的原点。 X 轴向右为正, Y 轴向下为正。几何图形中的坐标必须为整数。几何图形被编码为要素的geometry 字段的一个32位无符号型整数序列。每个整 数 是 CommandInteger 或 者 ParameterInteger 。解码器解析这些整数序列作为生成几何图形的一系列有序操作。指令涉及的位置是相对于 “游标”的,即一个可重定义的点。对于要素中的第一条指令,游标位于坐标系中的位置是(0 , 0 )。有些指定能够移动游标,因而会影响到接下来执行的指令。
以图2几何要素的存储面要素为例,面要素的3个坐标依次是(3 , 6 )、( 8 , 12 )、( 20 , 34 ),在编码过程中,首先将坐标信息转化为指令集,最后将指令集编码存储为PBF文件。
1.3.2 要素属性编码
GeoJSON 和 TopoJSON 中, 矢 量 瓦 片 中 的属性信息直接在文件中以对象数组的形式存储,
内容本身并未进行压缩。而 PBF 格式文件,要素属性被编码为 tag 字段中的一对对整数。在每对tag
中,第一个整数表示key 在其所属的layer的keys列表的中索引号。第二个整数表示 value
在其所属的layer的 values列表的中索引号。一个要素的所有 key 索引必须唯一,以保证要素中
没有重复的 属 性 项。每 个 要 素 的 tag 字 段 必 须为偶数。要 素 中 的tag 字 段 包 含 的 key 索 引 号
或 value 索引 号 必 须 不 能 大 于 或 等 于 相 应 图 层中 keys或 values列 表 中 的 元 素 数 目, 如 图 3所示
2. 矢量切片方案
当前,矢量 切片工具主要 有 Mapbox 、 GeoServer 、 ArcGIS Pro 等,各 种 工 具 运 行 环 境 不一,面向对象也各有不同。但矢量瓦片的总体切片技术流程基本一致,首先就是矢量数据的准备,如Shapefile 、 JSON 等数据格式;矢 量 瓦 片 的 制作,基于各自不同的切片机制进行,但切片原理都遵循矢量四叉树金字塔模型,最终表现为各自矢量瓦片格式包;矢量瓦片的发布工具众多,如SpatialServer 、 ArcGIS Sever 、 GeoServer ,都 是 成熟的矢量瓦片发布工具,客户端基于 WebGL进行矢 量 地 图 的 渲 染 显 示,总 体 技 术 流 程 如 图 4所示。
2.1 Mapbox Studio
Mapbox Studio[ 17 ] 是 Mapbox推出的矢量地图制作和发布的工具,提供标准的专业化制图方案。Mapbox 目前在线提供 6 种风格底图满足不同的场景需求;但 Mapbox Studio是一个线上工具,即对于发布自己的地图数据,需要注册用户、购买空间并将数据上传到 Mapbox ,采用 Mapbox在线配图工具配置自己的地图。
2.2 GeoServer
GeoServer[ 18 ] 是 OpenGIS Web 服务器规范的开源 GIS服务器,可以对包括矢量数据在内的各类 OGC标准 GIS数据进行缓存切片和服务发布。作为完全开源的 GIS服务器,无论是栅格还是矢量, GeoServer都可以很好的支持。
2.3 ArcGIS Pro
ArcGIS Pro[ 19 ] 作为 ESRI新推出的桌面端制图软件,支持矢量配图和切片,而且 ArcGIS Pro矢量瓦片方案已经基本达到电子地图栅格瓦片显示效果。不同于 Mapbox Studio和GeoServer矢量瓦片的PBF格式, ArcGIS Pro推出紧凑型缓存的存储格式bundle ,相比PBF ,瓦片迁移更加方便、创建更快、减少存储空间,便于局部区域更新的实现。
3. 方案对比
各种矢量切片方案都有各自的应用场景和适用对象,本文从自定义矢量制图、切片环境、切片机制3个角度进行对比分析。实验采用的数据为青岛市 全 域 电 子 地 图。测 试 环 境 为 ThinkPadT480笔记本电脑,操作系统是 Win10 , CPU 为I5 - 8250U@1.6GHz , 32GB内存,采用 NVIDIA
Geforce MX150显卡。
3.1 自定义矢量制图
GeoServer的自定义矢量配图没有任何的配置文件可供参考,相对难度较高。 Mapbox Studio在线提供众多成熟的字体、图标、风格等样式文件,可以供开发者很好的参考,在自定义过程中可以减少很多标准配置的问题。 ArcGIS Pro相对成熟,提供成熟的样式风格文件作参考,在自定义过程中有章可循。
3.2 切片环境
Mapbox Studio是在线工具,因此需要互联网的支持,离线环境下不能使用; GeoServer提供开源包,可以部署离线 B / S运行环境; ArcGIS Pro是ESRI新一代桌面端软件,同样可以在离线环境下运行。
3.3 切片机制
在处理矢量化数据时,记录中往往会存在许多重复数据,对进一步数据处理带来诸多不便。多余的数据,一方面浪费了较多的存储空间;另一方面造成所要表达的图形不光滑或不符合标准。为保证数据压缩和性能优化的问题,需要进行数据的抽稀,保证反映原图形或曲线的基本形状特征同时,能够为进一步的处理节省空间和时间。
对于 GeoServer ,在小比例尺阶段需要进行数据抽稀,但抽稀过程中由于相邻数据抽稀规则不完全一致,导致面状数据出现拓扑混乱,最终部分级别显示效果较乱。同样,在较大比例尺阶段,很多数据要素已经达到饱和,不再需要抽稀,但GeoServer依旧会生成同上一级一样的未抽稀的矢量瓦片数据,最终导致数据量很大。
ArcGIS Pro矢量切片采取相对智能的策略,不会根据地图显示级别一切到底,比如0~19级别地图,由于15级数据已近似没有数据抽稀的情况,能够支撑后面更大比例尺地图显示需要,这样16~19级数据无须再进行抽稀。这种策略可以大幅减少地图瓦片包的容量,但要求调图客户端同样支持这种策略,在 ArcGIS for JavaScript API系列版本中,目前只有最新版本4.x系列适应这种策略。因 Mapbox Studio需要联网上传数据,因数据精度较高、数据保密性等原因没有开展该项测试。实验中,对青岛市全域矢量电子地图分别使用 GeoServer 、 ArcGIS Pro进行矢量切片,切片级别为0~19级,各级别比例设置及切片各级别大小、所需时间如表2所示。
实验切片缓存大小结果对比如图 5 所示,横轴表示切片级别,纵轴表示总切片大小,由于抽稀策略的不同,发现 ArcGIS Pro切出的青岛市全域矢量切片包只有200 MB ;使用 GeoServer的矢量切片包约是1.8GB , GeoServer矢量切片保留了原始数据的所有属性信息,因此导致数据冗余度高,矢量瓦片包较大。切片时间对比如图 6 所示,横轴表示切 片 级 别,纵 轴 表 示 每 级 切 片 时 间,由 于GeoServer的每级缓存包更大,因此在切片时间上也相对较长。
综上所述,受不同的切片机制的影响,不同切片方案的差别主要表现在矢量切片包大小、数据抽稀、数据属性3个方面,具体如表3所示。
4. 跨平台应用
通过上述实验可以看出,相比栅格电子地图瓦片,矢量切片方案可以大大提高切片效率,上述3种矢量切片方案各有其局限性和应用场景,比如 MapBox仅支持互联网环境、 GeoServer配置复杂优化不足、 ArcGIS Pro需要 ArcGIS企业版发布等。在实际应用中,一般来说每个平台软件自带客户端 API都支持各自矢量瓦片访问规则。为实现客户端 API兼容其他瓦片格式从而达到矢量地图瓦片跨平台应用,常规解决办法是客户端自行扩展 API ,比如开源地图引擎Leaflet.JS即通过定制 API方式实现了对 MapBox和ESRI矢量瓦片的调用。但该种方式需要客户端开发人员充分了解每种瓦片的编码规则,且给客户端开发造成额外工作量,提升了客户端复杂度。本文研究过程中尝试了另一种思路解决了矢量瓦片跨平台应用,即在不改变矢量瓦片原始存储和服务规则的情况下,通过自定义微服务网关的方式实现多套矢量瓦片服务对应多客户端调用需求。
4.1 实现思路与过程
采用PBF格式的矢量瓦片服务规则稍有差别,以ESRI和 MapBox矢量瓦片为例,两者矢量瓦片访问样式 [20 ] 分别为:
除矢量瓦片服务器基本路径规则外行列号也相反,为实现服务兼容性,本文开发了微服务网关接收不同客户端访问样式,并在后台进行转换成另一种样式后向实际瓦片服务器发送请求获取实际数据后再转发给客户端。如图7所示,实现服务 - 数据请求,从1对1到 n 对 n 的转变。
4.2 应用效果与局限
通过微服务网关中转方式,从原客户端到服务器1对1的请求与响应变成了多对多的请求相应,从而实现了不需客户端做任何调整的真正跨平台的矢量瓦片调用。但该种方式目前仅实现了PBF格式的转发,如进一步实现JSON 、 TopoJ -SON 、 PBF多种数据格式的转发尚需进一步开发数据底层编码的转换方法,对服务器端运算资源是一笔不小的开销。
5. 结束语
虽然栅格瓦片仍有其不可忽视的优势,但随着互联网和移动 GIS的发展,矢量瓦片已渐渐成为 GIS应用和地图可视化的主流;高效的切片和快速应用是 GIS发展的趋势。本文对矢量切片的原理进行了深入分析,并从自定义切图、切片环境、切片 机 制 等 角 度 重 点 对 比 分 析 了 MapboxStudio 、 GeoServer 、 ArcGIS Pro 3个主流矢量切片工具的异同,提出了跨平台应用方法。不足之处,本文对于3个方案的交叉研究不够深入,如基于GeoServer发布工具 + Mapbox -gl- js API前端渲染,彻底实现离线化的研究,还有待于进一步突破。
本文作者:风帆远航
本文链接:https://www.cnblogs.com/flying-birds-xyg/p/16002170.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步