MS RFC 119:MapBox矢量图块(MVT)支持¶
- 日期
2017-08-07
- 作者
托马斯·邦福特,斯蒂芬·莱姆
- 联络
托马斯.bonfort@gmail.com,sdlime@comcast.net
- 状态
草稿
- 版本
MAPServer 7.2
1。概述¶
mapbox vector tiles(mvt)是向客户机提供平铺地图数据的替代方案。与栅格图块不同,矢量图块跨任意数量的地理空间层对坐标和属性信息进行编码。这允许丰富的应用程序开发,其中地理空间数据可以在客户机上进行过滤和符号化,而不需要额外的服务器交互。见 specification .
2。建议的解决方案¶
此RFC建议在MapServer和MapCache中实现MVT规范(版本2.1)。亮点包括:
不引入新的mapfile关键字,所有配置都使用现有机制
MVT是作为一个新的输出驱动程序实现的,可以与模式=map、模式=tile或wms操作一起使用。
该实现引入了对protobuf/protobuf-c的新依赖
2.1新的和更新的文件¶
新的和更新的文件描述如下:
2.1.1地图服务器¶
mapmvt.c(新):mvt实现代码
renders/mvt/vector_tile.proto(新):协议缓冲区定义文件
mapoutput.c(更新):注册MVT渲染器和默认输出格式(application/x-protobuf)
mapservutil.c(更新):拦截调用以生成mvt输出
mapwfs.c(更新):托马斯的原始作品中有一些残迹,边界框(bbox)是使用边缓冲区输出格式选项展开的。目前还没有通过WFS或查询创建MVT输出的机制,尽管将来可以添加它(类似于绘制查询映射)。
mapwms.c(更新):拦截调用以生成mvt输出
mapserver.h(更新):注册MVT渲染器和公共函数(例如msmvtWriteTile())
cmakelists.txt(更新):添加protobuf/protobuf-c规则
2.1.2 MpCaseCuffice¶
include/mapcache.h(更新):原始图像格式的新定义
lib/cache_disk.c(更新):添加原始图像格式支持
lib/configuration_xml.c(更新):处理与原始图像格式相关的配置
lib/core.c(更新):原始图像格式的句柄响应
lib/image.c(更新):添加原始图像格式支持-无元平铺
lib/image_raw.c(new):添加原始图像格式支持
lib/service_wms.c(更新):添加原始图像格式支持
lib/source_wms.c(更新):添加原始图像格式支持
lib/tileset.c(更新):添加原始图像格式支持
2.2配置说明¶
2.2.1地图服务器¶
gml_ 或 ows_
WMS的SRS元数据(层和服务器)应包括EPSG:3857和EPSG:900913
层必须定义投影
MVT输出格式支持一个名为边缘缓冲区的选项,该选项以地图单位定义图块之间的重叠量(默认值为10)。
MVT输出格式支持一个名为“范围”的选项,该选项以坐标单位定义平铺范围(默认值为4096)。使用此值将要素几何图形从地图坐标转换为平铺坐标。
2.2.2 MMAX缓存¶
示例配置如下:
<format name="MVT" type="RAW">
<extension>mvt</extension>
<mime_type>application/vnd.mapbox-vector-tile</mime_type>
</format>
<source name="test_wms_mvt" type="wms">
<http>
<url>http://mapserver.localhost/cgi-bin/mapserv?</url>
</http>
<getmap>
<params>
<LAYERS>layer1,layer2,layer3</LAYERS>
<FORMAT>application/vnd.mapbox-vector-tile</FORMAT>
<MAP>/mapserver/test.map</MAP>
</params>
</getmap>
</source>
<tileset name="test_mvt">
<source>test_wms_mvt</source>
<grid>g</grid>
<cache>sqlite</cache>
<format>MVT</format>
</tileset>
2.3 MAPServer请求示例¶
/cgi-bin/mapserv?map=mvt.map&mode=tile&tilemode=gmap&tile=1935+2856+13&layers=all&map.imagetype=mvt
/cgi-bin/mapserv?map=mvt.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=major_roads,lakes,sna,wma&STYLES=
&SRS=EPSG:3857&BBOX=-10434562.049185,5909509.084589,-10429689.188632,5914381.945142&WIDTH=256&HEIGHT=256&FORMAT=application/x-protobuf
三。实施细节¶
3.1.1地图服务器¶
实现有三个主要组件。MVT输出驱动程序、驱动程序注册和调用驱动程序(如适用)在发出映射、平铺或WMS请求时,实现是非侵入性的,对现有的代码库有最小影响。
3.1.2 MpCaseCuffice¶
该实现实现实现了一种新的原始图像格式。基本上,除了文件扩展名和mime类型之外,我们对其他格式一无所知。因此,不支持元图块支持和空白图块的符号链接等功能。一个额外的好处是,这种图像格式也可以用于MapServer生成的utfgrids——以及可能的其他来源。
第四章。限制¶
4.1.1地图服务器¶
当前实现只能与模式=映射、模式=平铺和WMS请求一起使用。呈现查询结果(认为查询映射)是可能的,但目前尚未实现。尚不清楚该支持的用例是什么。
4.1.2 MpCaseCuffice¶
只有WMS源被更新以处理原始图像格式。
测试是用磁盘和sqlite缓存完成的。后者不需要进行任何更改,因此其他缓存可能会开箱即用。磁盘缓存需要更新以解决空白磁贴处理问题。
WMS服务不支持对原始图像缓存的传递请求。这可能是可能的,但似乎提供的价值有限。
5.向后兼容性问题¶
没有预料到,但是正如前面提到的,这确实引入了对protobuf和protobuf-c库的新依赖。
6。安全隐患¶
没有预料到。
7。性能影响¶
预计不会对核心性能产生影响。
8。文档需求¶
主要需要的是教育用户如何处理MVT文件。实际上,这超出了MapServer的范围,但是让人们知道存在哪些客户机来呈现MVT图块是很重要的。此时存在许多客户机,其中最突出的是Mapbox GL JS和Openlayers 3.x。
9。错误ID和引用¶
地图服务器 pull request#5376
MapCache pull request#166
初始映射服务器 implementation
资源负荷 openmaptiles.org
10。投票历史¶
还没有投票