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和引用

10。投票历史

还没有投票