序
本文主要想记录一下关于矢量切片的学习心得,For me and for you like me!
矢量切片
矢量切片规范:传送门
awesome-vector-tiles:传送门
Esri矢量切片在线图层示例数据:传送门
矢量地图切片将矢量数据通过不同的描述文件来组织和定义,通常通过自定义文件或json文件进行传输,在前端按需请求不同的矢量瓦片数据文件,并利用类似canvas等技术进行绘制。使用这种技术有不少好处,例如不再需要为不同的样式而反复进行制图、渲染、切片、更新service等过程,并且在当前各种高分屏、视网膜屏大肆发展的阶段,避开按照特定DPI和分辨率渲染的栅格图片在不同的显示设备上无法以统一清晰的效果呈现,等等。
和栅格切片一样的思路,以金字塔的方式切割矢量数据,只不过切割的不是栅格图片,而是矢量数据的描述性文件,目前矢量切片主要有以下三种格式:GeoJSON,TopoJSON和MapbBox Vector Tile(MVT)
矢量切片常见格式
常见的格式有如下几种:GeoJSON,TopoJSON、MapbBox Vector Tile(MVT)、pbf。
GeoJSON、TopoJSON和.mvt 格式其实都是对数据的重新组织,一般来说 .mvt 压缩率更高,体积更小,GeoJSON 是比较可读的,比较容易让人看懂,TopoJSON 的可读性比较差,现实中根据实际需求选取矢量切片的格式。
矢量切片的优缺点
【传统栅格切片的缺点】
- 切图体积大
- 切图效率低
- 更改配图方案的话,需要重新切图
- 对高分屏的支持不足
- 数据完整性受损,渲染切片过程是将地理坐标数据转换为图片的过程,若要查询图片的多边形的属性,需要到服务器重新请求。
【矢量切片的优点:】
- 切图体积小
- 切图效率高
- 传输、渲染速度快
- 可以直接修改矢量切片文件的样式,不需要重新切图(重点)
- 可以动态切换不同语言标注
- 高分屏中显示很好
- 数据信息接近无损,但体积更小,请求指定地物的信息,直接在客户端获取,无需再次请求服务器;
- 对于栅格切片,更灵活,更细粒度的数据划分,要素级别;
- 数据更新快,或者说是实时的,当数据库中的空间数据变化后,再次请求的数据是改变后的,在客户端渲染后既是最新的情况;
【使用矢量切片的注意事项】:
- 矢量切片同样不可以编辑,如果你想在客户端编辑要素,最适合的是使用 OGC 的 WFS。
- 目前为止,大多数的矢量切片技术都没有在地图投影上做太多扩展,例如Mapbox就只支持Web Mercator投影。如果要使用其他坐标系,那么可能需要你自己开发了。
- 对于数据量较大较复杂的,矢量切片加载可能没有你想象的快。
矢量切片的生成
可以使用GeoServer、MapServer、ArcGIS Pro生成切片。也可以使用开源的工具生成(如TileStache)。具体生成过程本文不做赘述,请自行百度。
矢量切片的展示
这块可以使用Leaflet、Openlayers,Mapbox-GL,ArcGIS API For JavaScript
基于Leaflet
官方插件链接:https://leafletjs.com/plugins.html#vector-tiles
基于Openlayers
官方示例链接:https://openlayers.org/en/v4.6.5/examples/?q=mvt
基于MapBox
官方示例链接:https://docs.mapbox.com/mapbox-gl-js/example/third-party/
基于ArcGIS API for JavaScript
官方示例链接:https://developers.arcgis.com/javascript/latest/sample-code/layers-vectortilelayer/index.html
参考: