矢量瓦片的常识

一、矢量瓦片的基本原理和相关格式

现阶段,电子地图瓦片主要使用两种方式,一种是传统的栅格瓦片,另外一种是新出的矢量瓦片(Vector Tiles),前者是采用四叉树金字塔模型的分级方式,将地图切割成无数大小相等的矩形栅格图片,由这些矩形栅格图片按照一定规则拼接成不同层级的地图显示。

矢量瓦片类似栅格瓦片,是将矢量数据用多层次模型分割成矢量要素描述文件存储在服务器端,再到客户端根据指定样式进行渲染绘制地图,在单个矢量瓦片上存储着投影于一个矩形区域内的几何信息和属性信息。当客户端通过分布式网络获取矢量瓦片、地图标注字体、图标、样式文件等数据后,最终在客户端进行渲染输出地图。

矢量瓦片没有统一数据标注,mapbox基于Google protocol buffers制定了MAPBOX CECTOR TILE SPECIFICATION通用的矢量瓦片数据标准,被许多公司和组织采用。

矢量瓦片数据组织分成两层,一层是地图表达范围内的瓦片数据集组织模型,另一层是单个瓦片内要素的组织模型。

矢量瓦片数据集的组织模型类似栅格瓦片金字塔模型,包含坐标系、投影方式、瓦片编号已实现任意精度、空间位置与矢量瓦片的对应关系,并被栅格瓦片规范相互兼容,这样方便将矢量瓦片转换成栅格瓦片,毕竟两者采用相似的投影方式和瓦片编号方式。

单个瓦片要素的组织模型将几何信息和属性信息分开存储,几何信息主要包括点、线、面和未知要素类,元数据信息包含了图层属性和要素属性。

用于描述矢量瓦片属性信息和几何信息的文件格式主要有GML/Cesium Vector Tiles/GeoJson(.json)/TopoJSON(.topjson)/Google Protocol Buffers(PBF),其中GeoJSON是一种基于Javascript对象表示法的地理空间信息数据交换格式,通用性强,易读取,几乎所有的GIS引擎都支持该格式的动态渲染电子地图数据,但该格式还是容易有信息冗余的情况。TopoJSON是在GeoJSON上共享几何要素拓扑编码,减少冗余信息的数据格式,但它的读取性较差,支持该格式的软件不多,所有每次读取需要使用专门的工具进行转换才可以,支持该格式的软件有著名的Web三维软件Cesium JS(该产品是有AGI公司开发的一款开源三维地图的JS库,主要是可以用于时空数据领域的一些三维开发,它在github上已经有6.2K个star了,github地址如下:https://github.com/CesiumGS/cesium),PBF是一种更高效轻便的结构化数据存储格式,将矢量瓦片数据打包成矢量瓦片包可以便于网络传输和数据库存储,常见的矢量瓦片有VTPK格式(用于ArcGIS)、MBTiles格式(用于SQLite数据库存储)等。

虽然矢量瓦片也采用金字塔的方式进行存储数据,但是由于其默认网格数较高,以PBF为例,单个矢量瓦片的网格是4096*4096,所以在视网膜屏等设备上也显示地很清楚,而不会出现锯齿,同时这个网格数可以随时进行修改调整,以更精确的方式来记录几何位置信息从而适应不同屏幕的要求。同时,在矢量瓦片中,会将其几何信息转换成指令集表达,再将指令存储到32位无符号整数进行存储。而在存储属性信息是,则是以不同的是表示,geojson直接标注,PBF则是用索引号进行标注。

矢量瓦片之所以能够在客户端进行快速渲染,主要得益于客户端图形渲染技术的发展,推动了地图渲染引擎的快速发展,常见的图形渲染技术有OpenGL/WebGL等,而OpenGL和WebGL是底层3D绘图技术标注,根据这些标准衍生出了许多地图渲染引擎,例如使用OpenGL 图形API的开源3D渲染引擎Tangram(包括用于浏览器渲染引擎Tangram-JS和移动终端渲染引擎Tangram-ES,该产品有mapzen开源提供,github地址为https://github.com/tangrams/tangram,具有1.7K个star)、Mapbox使用的Mapbox GL地图渲染引擎(包含浏览器渲染引擎Mapbox GL JS和移动端渲染引擎Mapbox GL Native,github地址为https://github.com/mapbox/mapbox-gl-js,具有6.4k个star)。

矢量瓦片所使用的样式文件是用来在客户端定义绘制地图数据源、绘制顺序和绘制样式等规则的文件,比如Mapbox使用的json样式文件可以让用户利用Mapbox GL JS地图引擎实时渲染出互动性强的3D场景地图。

二、矢量瓦片和栅格瓦片的优劣势

使用矢量瓦片地图来提供地图比栅格瓦片地图由更好的显示效果,互动性也强,实现二三维一体化,更新速度快,地图样式快速切换,占用空间少,无极缩放显示等特点。

其中占用空间少是和栅格瓦片进行的对比,传统的栅格瓦片每一张瓦片大小在十几KB左右,虽然看上去每张瓦片的大小不大,但是若放到全国或世界范围内来看的,需要的瓦片数据量极大,按照四叉树金字塔切割的栅格瓦片的上一级的某张瓦片可以切割成下一级的四张瓦片,因此,瓦片的总量也是极快的增加,甚至最终所需存储空间可以达到TB级别,而矢量瓦片就相对小很对,以全国数据的切图来看,最终所需的切图所需存储空间也仅需要GB级别的就可以了。同时,由于矢量瓦片的渲染是在客户端进行的,它仅需要将请求到的数据按照样式文件进行渲染即可,这让矢量瓦片在不改变切图比例与地图内容的情况下,可以很快的调整地图样式,而不用为调整地图样式而重新进行切图,并且矢量瓦片和栅格瓦片虽然都需要对矢量数据进行切图预处理,但实际上由于矢量瓦片切图仅是针对几何信息和属性信息进行分层处理,所以它相对于栅格瓦片需要对图像分割来说速度要快很对,全国数据的栅格切图工作基本上是以周为单位的处理,而矢量瓦片可能仅需几天时间,这对于某些需要快速处理的项目来说具有先天优势,简单的将矢量瓦片和栅格瓦片的优劣势进行比较后,可以得到以下表格内容:

优势劣势

矢量瓦片瓦片占用空间低,瓦片切图效率高,渲染地图效果快,可以随时动态调整地图样式,地图分辨率高。对客户端性能要求比较高,对旧设备兼容性存在问题。

栅格瓦片瓦片提前渲染,对客户端性能要求低,性能稳定。瓦片占用空间高,瓦片切图效率低,无法随时动态调整地图样式,地图分辨率低,加载速度比较慢。

鉴于矢量瓦片的优势以及各方面的考虑,现在大部分互联网地图服务提供商都开始在其网站上提供的地图服务换成矢量瓦片进行地图展示,这里面就包括百度地图、高德地图、腾讯地图、谷歌地图等,但是依然会有不少互联网地图服务提供商依据在提供栅格瓦片地图,这里有搜狗地图、Bing Map、天地图·北京等。(以上信息是截止本次文章撰写时统计的,不排除后来存在变动。)

三、矢量瓦片切片的主要技术流程

虽有现在矢量瓦片已经逐步成为一张地图瓦片的主流方式,但是各大厂商的切片工具和运行环境却还是各不相同,常用的矢量瓦片切片工具有Mapbox的Mapbox Studio和Tippecanoe(前者需要访问Mapbox的在线服务,后者为Mapbox的开源产品)、OGC的开源产品GeoServer、Esri的ArcGIS Pro、Osgeo的开源产品MapServer等,这些工具都可以对矢量数据按照矢量瓦片要求进行切图,虽然这些工具不一致,但它们都需要遵循矢量四叉书金字塔模型的原理,将矢量数据发布成各自格式的矢量瓦片数据包,同时,它们的主要技术方法是一致,基本按照以下流程进行:

①获取矢量数据;

1.1、获取矢量文件(.shp/.tab等);

1.2、矢量数据入库形成矢量数据表格;

②矢量瓦片制作;

2.1、获取切图范围、切图方式、切图等级等信息,确保切片后能满足使用;

2.2、获取多层矢量瓦片数据表;

2.3、将矢量瓦片文件(Geojson/Topojson/PBF等)放入到不同图层下;

③服务发布与展示

3.1、以服务的形式将矢量瓦片发布出来,并提供给客户端;

3.2、客户端按照一定调用规则调用矢量瓦片服务,并按照样式文件进行前端渲染展示。

基本上大部分的切片工具都是按照这一流程对矢量数据进行的切片工作,即使是不同的厂商和切片工具,只需要按照类似过程进行处理即可完成切片工作,另外在2018年,OGC也参与到矢量瓦片这一技术的研究中,验证了相关信息, 并形成了相关报告,详见https://www.ogc.org/projects/initiatives/vt-pilot-2018

另外,不同切片工具按照不同的切片方案产生的矢量瓦片数据占用存储大小也不一致,主要原因是在于其保留的矢量瓦片的属性信息不同导致的,在瓦片几何信息一致的情况下,切片方案内制定的矢量瓦片属性信息规则不一样,其最终产生的矢量瓦片规则也会存在差异,这种差异最终影响的不仅仅是矢量瓦片占用的存储空间,也会影响切片工具在进行切图工作所需要耗费的时间上,例如ArcGIS Pro在进行切片是会按照一定抽稀策略来对矢量数据的属性信息进行抽稀,仅保留有用的属性信息,而使用GeoServer的切片工具则会保留全部的属性信息,这就导致两种最终切片的存储空间的巨大差异,例如一个城市的地图,用ArcGIS Pro切片会有几百MB的矢量瓦片包,而用GeoServer则会需要几百GB的矢量瓦片包,因此在使用不同切片工具生产矢量瓦片的时候需要考虑到这些内容。

四、跨平台调用矢量瓦片数据

由于矢量瓦片没有统一标准,因此我们在互联网上常见的使用矢量瓦片的互联网地图在制作矢量瓦片的时候只需要遵循矢量四叉树金字塔模型的原理即可,因此,高德地图、百度地图等互联网地图提供商在使用矢量瓦片的时候纷纷按照自己的矢量瓦片原则进行地图切片,这就导致了你在使用它的地图瓦片时,必须按照它制定的规则进行渲染才能将地图显示出来,那么不同切图工具切出来的矢量瓦片是否够相互调用了,答案是肯定的,但是你在调用它的瓦片时还是需要遵守它的切图规则来进行。

跨平台调用的时候,可以通过架设一套微服务来将请求的矢量瓦片数据规格转成被请求的矢量瓦片数据规格,通过微服务将客户端的请求进行重新编码后发送至服务器端进行请求,再将服务器端的返回的数据按照客户端的请求规格再次进行编码后返回给客户端进行渲染展现。

具体如何实现跨越参考不同平台的的开发文档进行设置,这里就不在细聊了,再聊下去就不是常识了。

另外附上一些可以参考的开发文档的访问链接:

①GeoServer开发文档:https://docs.geoserver.org/

②MapServer开发文档:https://www.osgeo.cn/mapserver/documentation.html

③tippecanoe开发文档:https://github.com/mapbox/tippecanoe

④Mapbox GL JS开发文档:https://docs.mapbox.com/mapbox-gl-js/api/

⑤Mapbox Vector Tiles API 开发文档:https://docs.mapbox.com/api/maps/#vector-tiles

⑥ArcGIS Pro快速入门教程:https://pro.arcgis.com/zh-cn/pro-app/get-started/introducing-arcgis-pro.htm

⑦Cesium开发手册:https://cesium.com/docs/


原文地址:

聊一聊矢量瓦片的常识 - JackSirius的文章 - 知乎

https://zhuanlan.zhihu.com/p/272203128

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,717评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,886评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,531评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,594评论 2 9