如何设置单个 Mapbox Vector Tile 的样式?

How to style a single Mapbox Vector Tile?

我想在离线环境中拍摄一张Vector Tile extracted from an MBTiles file and style it according to a Mapbox Style Specification

研究:

Mapbox 有一个 Static Api,它完全符合我的要求,但显然需要互联网访问。

Mapbox 也有 Mapbox-Gl-Native and Mapbox-Gl-JS 库,它们看起来非常适合从矢量图块生成地图,但我似乎找不到生成单个静态图像而不是整个地图的方法。有办法吗?

Tessera 是一个能够为矢量数据设置样式但仅适用于 tm2 项目或 mapnik 样式表的图块服务器

背景: 使用 Telerik Rad Map WPF Control 或 .NET WPF 的任何地图控件,我想使用 vector.mbtiles 作为离线地图源。

我能够从 mbtiles 中提取单个矢量瓦片并使用 mapbox-vector-tile-cs 将其反序列化为可用信息,甚至能够从数据创建基本位图图像并将其提供给 telerik 和它能够绘制简单的地理地图,但 ciy 和 street 标签需要更复杂的代码来防止标签相互重叠和正确倾斜。

我目前能做的事情:

我的问题:

是否存在任何语言的现有库,甚至是能够根据 Mapbox Style Specification 或任何可配置样式规范有效地设置单个矢量文件样式的可执行文件?

任何帮助都是有用的。我已经开始移植 Mapbox-Gl-Native 库,这很困难,因为它针对移动平台并且做了很多我不需要的事情,而且我无法弄清楚如何简化它以仅处理一个图块要求。 Telerik 仅在特定 x/y/zoom 处请求位图,因此这就是我需要完成的全部工作。

您可以使用tilelive-copy or tl 从矢量图块生成栅格图像。您可以使用 TM2 样式(以前版本的 Mapbox Studio 支持)或 Mapnik XML 样式表。 TM2style 允许您使用 CartoCSS 来定义样式规则。

然后您可以传入图块的边界和缩放级别:

./node_modules/tl/bin/tl.js copy -z 13 -Z 13 -b "-77.34027 38.7665218926 -.8420375202 39.1199273249" tmstyle://./stations-style.tm2 file://./tile-export

您必须预先安装相应的 tilelive 协议和 tl:

npm i tilelive-tmsource tilelive-tmstyle tilelive-file tl

"awesome vector tiles" 存储库包含 mapbox 矢量切片的渲染备选列表。也许你会发现它很有用。

这是另一个关于从矢量源生成光栅图像的有用资源:https://www.azavea.com/blog/2015/05/29/converting-mapbox-studio-vector-tiles-to-rasters-2/

我还找到了另一个解决方案。 NET-Mapnik 是一个 .Net 解决方案,允许您根据 mapnik xml 样式设置矢量切片的样式。这是迄今为止我发现的最好的 WPF 解决方案。我能够使用 sqlite 连接从 mbtiles 文件中获取矢量切片,使用 Net-Mapnik 进行样式设置,然后 return 将其作为位图流传输到 telerik。