如何设置单个Mapbox矢量图块的样式?

时间:2016-09-13 21:11:00

标签: .net telerik mapbox-gl mbtiles vector-tiles

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

研究

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

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

Tessera是一个磁贴服务器,可以设置矢量数据的样式,但只适用于tm2项目或mapnik样式表

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

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

我目前可以做什么:

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

我的问题:

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

任何帮助都会有用。我已经开始使用Mapbox-Gl-Native库的一个端口,因为它的目标是移动平台并且做了很多我不需要的工作,所以我很难弄清楚如何简化它只处理一个瓷砖要求。 Telerik只要求特定x / y / zoom的位图,这就是我需要完成的任务。

2 个答案:

答案 0 :(得分: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

"awesome vector tiles" repo包含地图框矢量切片的渲染替代品列表。也许你会发现它很有用。

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

答案 1 :(得分:0)

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

相关问题