前言
INFO
为什么用矢量切片,矢量切片解决了什么问题?
在没有矢量切片之前,我们在前端加载矢量数据,通常先将矢量数据通过GIS服务器发布为WMS
或WMTS
服务,这样总会带来一些问题:
- 这两种服务本质上都是服务端根据矢量数据生成图片,这样也就丢失了矢量数据的属性;(PS:矢量数据使用图片来加载也总觉得怪怪的)
WMS
:- 速度比较慢,WMS服务请求的图片需要GIS服务器实时生成,本身就需要一些时间,同时生成的图片体积也比较大,前端需要一些时间才能完成加载;
WMTS
:WMTS
需要调用栅格切片,通常生成栅格切片的速度比较慢,同时占用磁盘空间也比较多;- 不便于修改,修改矢量数据后需要再次生成切片;
1、矢量切片的概念
矢量切片(vector tiles)
是一种用于在Web地图应用程序中渲染地图瓦片的数据格式。与传统的栅格瓦片不同,矢量切片是基于矢量数据的,其中每个瓦片都是一个经过预处理的矢量图形数据集,其中包含了地图中的所有要素,如道路、河流、建筑物等。
由于矢量切片是基于矢量数据的,因此它们具有以下优点:
- 支持更高的分辨率和更丰富的地图信息,可以更好地呈现细节和复杂性。
- 可以在客户端动态地调整地图要素的样式和交互,从而提供更好的用户体验。
- 与栅格瓦片相比,它们的大小更小,因此可以更快地生成并占据更小的体积
2、矢量切片格式
MVT
( MapBox Vector Tile)格式:Mapbox定义的一种矢量切片格式,是应用最广泛的一种格式。MVT采用protobuf
文件格式,是 Google 开发的高效、可扩展的二进制数据交换格式。protobuf 格式的矢量切片通常包含图层信息、要素数据和样式信息等。GeoJSON
格式:这是一种基于 JSON 格式的地理数据交换格式,通常使用 .json 文件扩展名。GeoJSON 格式的矢量切片包含地理坐标信息、要素类型、属性信息和样式信息等。TopoJSON
格式:这是一种优化的 GeoJSON 格式,可以更有效地压缩地理数据,通常使用 .json 文件扩展名。TopoJSON 格式的矢量切片采用拓扑结构,可以在保留地理坐标和属性信息的同时,减少数据冗余,提高数据传输效率。
3、矢量切片的生产
有哪些生产矢量切片的工具?
- Tippecanoe:
**Tippecanoe**
是一个由Mapbox
开发的开源工具,可以将GeoJSON
、MBTiles
和PostGIS
数据转换为矢量切片,支持标签聚合、数据过滤和动态符号等功能。 - Mapbox Studio:
Mapbox Studio
是一个在线的地图设计工具,可以将矢量数据转换为矢量切片,支持高级数据处理、符号定制和地图样式调整。 - ArcGIS Pro:ArcGIS Pro是Esri公司开发的桌面GIS软件,可以将矢量数据转换为矢量切片,支持多种数据格式和符号定制。
- QGIS:QGIS是一个开源的桌面GIS软件,可以将矢量数据转换为矢量切片,支持多种数据格式和符号定制。
- GeoServer:Geoserve安装矢量切片拓展就可以生产矢量切片
- PostGIS: PostGIS支持动态矢量切片
四、矢量切片的的应用分析
矢量切片具有很多的好处,个人觉得对于矢量数据都应该使用矢量切片,但目前矢量切片在使用上并没有很完善的、整套的开源解决方案,
笔者目前了解到的开源方案:
- 矢量切片生产:Geoserver动态切片、QGIS、PostGIS实时切片
- 地图配图: maputnik(开源的mapbox样式在线编辑器)
- 客户端:openlayers、mapboxgl
但这种方案使用的工具涉及很多不同厂商或组织,技术可能并不成熟,需要踩的坑比较多。整体实施流程比较繁杂,不同的图层要素需要分别切图,再进行配图。相较于使用Arcgis等技术栈就可以实现统一配图再切图,并不方便。
实践的技术栈 openlayers + postgis+geoserver+maputnik
PostGIS动态矢量切片(原理+实现)openlayers 实时加载动态矢量瓦片 - 掘金Serving Dynamic Vector Tiles from PostGIShttps://medium.com/tantotanto/vector-tiles-postgis-and-openlayers-258a3b0ce4b6PostGIS矢量切片技术助力GIS可视化
cesium加载矢量切片?
cesium本身是不支持矢量切片的,这里有一个官方的开放的issue,里边有关于矢量切片的讨论,也有一些大牛自己开发支持矢量切片的例子:cesium-vector-providerVector Tiles · Issue #2132 · CesiumGS/cesium