使用外部地图的Mapbox GL

Ste*_*kha 10 android openstreetmap mapbox mapbox-gl mapbox-gl-js

我想在我的Android应用程序中使用Mapbox GL.这项服务即将发布,我有一个关于使用渲染器的棘手问题.

我喜欢渲染器本身,但我真的想在应用程序中使用我自己的地图数据(而不是Mapbox提供的数据和支付的数据).例如,我想自己解析OpenStreetMaps数据,以某种方式自定义它,然后放入渲染器内部以在我的应用程序中显示它.

现在问题是:使用Mapbox GL时是否可以使用我自己的地图数据?或者它只能用于Mapbox数据?

预先感谢您的任何帮助.也许你知道其他任何做得好的解决方案吗?问题是,我想要矢量图块,而不是光栅图块.这个项目计划在以后为iOS开发.

Klo*_*ies 9

您可以将MapBox开源SDK与您自己的磁贴一起使用.适用于Android,iOS或Node.JS的Mapbox Native渲染器可直接用于MapBox.com平台之外托管的切片.

请参阅示例移动应用程序"OSM2VectorTiles"从自定义服务器加载矢量切片或从嵌入式MBTiles本地加载.

诀窍是style将API中的属性指向您自己的JSON样式文件 - 它从您自己的服务器请求矢量切片.一个例子:见https://gist.github.com/klokan/3eee87899644f5d82b3946bf0cd1e176

请参阅项目http://www.openmaptiles.org/,您可以在其中下载由OpenStreetMap制作的可立即使用的矢量图块 - 或者查看该项目的文档,了解如何生成您自己的自定义矢量图块.

https://openmaptiles.org/docs/https://gis.stackexchange.com/questions/125037/self-hosting-mapbox-vector-tiles描述了矢量图块本身的托管

您可能需要托管资产(字体字形+精灵)和JSON样式本身 - 或将它们直接嵌入到您的移动应用程序中.

如果要在服务器上栅格化具有相同JSON样式的矢量切片 - 对于与旧Web客户端(Leaflet,...)兼容的Web应用程序,或者与移动应用程序贴图具有相同外观和感觉的静态地图或打印输出,你可以查看https://github.com/klokantech/tileserver-gl


MaB*_*aBu 3

您可以使用自己的瓷砖。我尝试了两件事。生成我自己的Mapzen 矢量图块(它们使用与 Mapbox 相同的格式)并且您也可以免费使用它们。这是它们的图层描述。这是相当密集的工作。您需要有 postgresql 并将整个 OSM PBF 导出加载到数据库中,然后运行 ​​python 服务器,该服务器从该数据库请求数据并渲染矢量切片。我认为这意味着渲染队列中的所有图块,因为每页渲染可见图块需要几秒钟的时间。查询DB服务器之后,大部分时间都花在了python上。它的优点是你能得到漂亮的瓷砖。它基本上拥有您需要的一切,但定制起来要困难得多。例如,如果您想为自行车道添加特定样式。您需要深入研究代码并更改几个查询模板和许多其他内容。

然后我尝试了Tilemaker。这只是 C++ 程序,它读取 OSM PBF 转储和 lua 配置脚本(您可以在其中指定要发送到图块中的标签)并吐出 Mapbox 图块。它的优点是更容易设置和自定义,并且所有图块都会立即渲染。但制作漂亮的瓷砖却更难。(又名加载所有不同的高速公路标签是不同类型的道路。由您指定,但这已经在前面提到的 Mapzen 和 Mapbox 中起作用)。

例如,Mapzen 道路图层中的种类在 Mapzen 中这已经得到处理,但在 Tilemaker 中,您可以将从不同 OSM 标记获取道路类型的所有条件写入图层中。而且土地利用标签变得更加复杂,因为 kind 是:

土地利用、休闲、自然、高速公路、航空和便利 OSM 标签的组合,或自然地球区域的城市区域和公园或受保护土地的组合。

当然,您可以拥有完全不同的标签,但最好有一个可以告诉您正在查看的土地用途的标签。

You ned to know that Mapbox, mapzen your custom mapbox tiles all use same format, but each will have different tags. So the style you create for one probably won't work for the other.

For creating styles you can use Mapbox Studio (but is probably useless since it is in public beta currently and I'm not sure if you can specify own tiles there).

我使用了Mapbox codeflow,它基本上是带有 gulp 脚本的 Nodejs 服务器,当样式文件更改时,该脚本会使用地图重新加载站点。除了 JSON 之外,它还支持 toml、JSON5 和 yml 的书写样式。它还可以很好地显示错误。(仅缺少行号)目前它支持版本 7 的样式,但 8 版本目前已发布。为了获取错误的行号,我使用了Mapbox GL 样式规范,它也可以将样式更新到新版本。您还可以尝试Glug,这是一种不同风格的语言,可以编译为 Mapbox GL 风格。它更紧凑一些。

要使用图块,您还可以使用mb-util创建 mbtile并使用它们。

  • 最近我发现[OSM2vector](http://osm2vectortiles.org/)它维护了反向工程的mapbox样式。它也是 GitHub 上的一个开源项目。唯一的问题似乎是它的图块比 MapBox 落后 2 个版本。 (3认同)