11

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

我喜欢渲染器本身,但我真的想在应用程序中使用我自己的地图数据(不是数据,由 Mapbox 提供并且是付费的)。例如,我想自己解析 OpenStreetMaps 数据,以某种方式对其进行自定义,然后放入渲染器中以在我的应用程序中显示它。

现在的问题是:在使用 Mapbox GL 时是否可以使用我自己的地图数据?还是只能与 Mapbox 数据一起使用?

预先感谢您的任何帮助。也许您知道针对此问题的任何其他完善的解决方案?问题是,我想要矢量图块,而不是光栅图块。并且这个项目计划在以后为iOS开发..

4

3 回答 3

10

您可以将 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

于 2016-04-25T10:27:27.873 回答
3

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

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

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

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

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

您需要知道 Mapbox、mapzen 您的自定义 mapbox 瓦片都使用相同的格式,但每个都有不同的标签。因此,您为其中一个创建的样式可能不适用于另一个。

要创建样式,您可以使用 Mapbox Studio(但可能没用,因为它目前处于公开测试阶段,我不确定您是否可以在那里指定自己的图块)。

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

对于使用图块,您还可以使用mb-util创建 mbtiles并使用它们。

于 2015-11-09T13:17:19.920 回答
0

如果你有一个正在运行的 Tileserver GL,那么就像从 mapbox 的示例应用程序中更改以下行一样简单:

mapboxMap.setStyle(Style.MAPBOX_STREETS) {
        // Map is set up and the style has loaded. Now you can add data or make other map adjustments.
        }

mapboxMap.setStyle(Style.Builder().fromUri("https://maps.somedomain.com/styles/awesome_style/style.json")) {}
于 2020-08-03T21:10:39.287 回答