1

我想在离线环境中从MBTiles文件中提取单个Vector Tile并根据Mapbox Style Specification 对其进行样式设置。

研究:

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

Mapbox 还具有Mapbox-Gl-NativeMapbox-Gl-JS库,它们似乎非常适合从矢量切片生成地图,但我似乎无法找到一种方法来生成单个静态图像而不是整个地图。有办法吗?

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

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

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

我目前能做的:

  • 使用自定义 Telerik TiledProvider 和自定义 Telerik TiledMapSource
  • 从 mbtiles 中提取矢量瓦片
  • 将矢量切片反序列化为 C# 类
  • 使用矢量数据创建不带标签的数据位图

我的问题:

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

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

4

2 回答 2

2

您可以使用tilelive-copytl从矢量切片生成光栅图像。您可以使用 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

真棒矢量瓦片” repo 包含 mapbox 矢量瓦片的渲染选项列表。也许你会发现它很有用。

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

于 2016-09-19T14:45:13.920 回答
0

我还找到了另一个解决方案。NET-Mapnik是一个 .Net 解决方案,它允许您根据 mapnik xml 样式设置矢量瓦片的样式。这是迄今为止我发现的最好的 WPF 解决方案。我可以使用 sqlite 连接从 mbtiles 文件中获取矢量切片,使用 Net-Mapnik 设置样式并将其作为位图流返回到 Telerik。

于 2016-10-11T18:44:02.287 回答