5

所以我猜这个答案是“不”,但是有没有办法将我用 mapbox studio ( https://www.mapbox.com/studio/ ) 在线设计的地图导出到 .mbtiles 文件中所以我可以自己主持?

老实说,我愿意为此付钱(省去了获取世界 .pbf 文件并将其放入 postgresql 数据库的麻烦,尤其是像我这样的平庸计算机)

听起来也许曾经有一种方法可以做到这一点,但到目前为止,他们似乎已经取消了这种能力。我可以看到很多不同的方式来使用我创建的地图,但是一切都迫使我使用 mapbox 作为托管服务......似乎没有办法下载我创建的地图。

4

2 回答 2

12

我认为你的假设是正确的。MapBox 似乎确实希望您使用他们的 API 和 API 密钥。

但是,如果您可以回退到光栅图块,则可以使用部分解决方案。或者您可以从 OSM 数据而不是从 mapbox 服务器获取矢量 mbtiles。

mapbox 离线支持 android/ios

我在 2017 年 4 月联系了 mapbox 支持,我被告知虽然您可以从 MapBox studio 下载的样式文件不包含图块,但有一种方法可以让它们在 Android/iOS 上离线渲染。

如果您想离线使用 Mapbox 地图,您需要按照适用于 Android 或 iOS 的示例进行操作,具体取决于您的平台。本质上,移动 SDK 接收指向您在 Mapbox Studio 中创建的自定义样式的样式 URL,并且 SDK 处理保持地图离线所需的所有其他资源(字体、图标、图块集等)的下载。查看我们的离线地图指南,了解更多有关其工作原理的信息。

链接:

快速浏览一下示例代码,图块的下载似乎是在应用程序内完成的,但提前完成了,例如在您安装应用程序之后,您仍然有网络连接。关于您的计费问题,我没有立即看到您的 Mapbox API 密钥是否完全包含在此下载中。每个离线区域有 6000 个离线磁贴限制。

不适用于桌面:该网站还提到离线不是 MapboxGl-JS 的选项,因此您必须破解它才能使您的离线区域在桌面网络浏览器上可用。

mapbox studio 导出为 mbtiles...

据说设置中有一个不明显的选项可以将您的源下载为 mapbox studio classic中的 mbtiles 文件。github 上的一个mapbox 经典问题有一个按钮应该在哪里的屏幕截图。现在这个选项可能已经消失了。

该 github 项目https://github.com/klokantech/vector-tiles-sample提供了项目/工具的链接,这些项目/工具可以将 mbtiles 文件分解为其包含的 pbf 文件,这些文件是每个矢量瓦片的 protobuf 压缩格式(https ://github.com/mapbox/mbutil)。略显陈旧。

一种可能有效的方法是提前缓存从 MapBox 检索到的每个图块的网络请求,然后在您的 APP 中代理对缓存的请求。我不确定这是否违反 ToS。您可能必须以编程方式使用您希望缓存的所有 XYZ 坐标进行操作。

与tippecanoe一起潜水以产生矢量瓷砖

您可以使用tippecanoe 创建矢量图块(并自己托管)。这不是 MapBox,我知道。但从长远来看,它可能会让你走得更远。

关于它的简短博客文章:http: //fuzzytolerance.info/blog/2017/02/02/Making-your-own-tiles-with-Tippecanoe/

您创建的mbtiles,您可以将它们分层,并可能使用开源maputnik(有点像mapbox的样式编辑器)对它们进行样式设置。然后你用你自己的服务器来服务 mbtiles,并将你的样式插入到mapboxGL-js或 openlayers 中。

TileMill -- (.mbtiles with raster tiles) 后备

TileMill 仍然可用(但已弃用),在桌面上运行,并允许您从 shapefile 创建地图(例如,您可以在https://mapzen.com/data/metro-extracts获取单个城市的 openstreetmap shapefile /)。

TileMill 会在流程结束时为您提供一个 mbtiles 文件。虽然,mbtiles 包含光栅图块,而不是矢量图块。矢量瓷砖可以动态设置样式,因此当您想要使用字体适应各种情况或调整照明时,它在移动设备上非常有用。

光栅图块可能就足够了,因为在您的应用程序中,您可能能够在该基础层之上渲染其他交互式对象。OpenLayers 是一种可移植的框架,您可以在其中执行此操作,例如,允许用户绘制对象或单击您从数据库中加载的与地图数据分开的兴趣点。

获取基于 OSM 的矢量图块而不是 mapbox

现在似乎有一个矢量瓦片的替代制造商, http: //openmaptiles.org(以前是http://osm2vectortiles.org)。

你可以去这里,为你选择的城市下载一个 mbtiles 文件,例如:https://openmaptiles.org/downloads/#city,然后使用磁贴服务器为你的应用程序提供该文件(本地)。(或使用上述工具之一将其分解为单独的 pbf 文件并从本地磁盘/内存中读取文件)

通过这种方法,您可以将来自 OSM 的矢量 mbtiles 与您在 mapbox studio 中创建的样式(mapbox studio 允许您下载包含 .json 样式的 zip 文件)相结合,您仍然可以使用 MapBoxGL 来显示它。

有 Maputnik http://maputnik.com/,您可以使用它来编辑 mapboxgl 样式文件(编辑器与本地存储一起使用)。并且大概有https://github.com/boundlessgeo/ol-mapbox-style允许您将该样式转换为适合 OpenLayer 样式 API 的一段代码。

于 2017-04-22T08:01:20.077 回答
0

据我所知 Mapbox 不提供地图下载。您可以使用他们的矢量切片 API 直接下载矢量地图,并根据您的矢量切片计数收费。每月免费提供 200K 瓷砖。在我的实验中,8 万块瓷砖代表了大约 200 平方公里的面积。因此,您会很快用完大面积的免费瓷砖,并且每增加 10 平方公里的面积就必须支付 1 美元。(所有基于名义观察的非常近似值)。此外,这些也留下了将 .mvt 文件实际打包成 MBTiles 格式的挑战。

我建议另一种方法。

您可以使用此工具从任何 .osm.pbf 文件创建 MBTiles - https://github.com/systemed/tilemaker

  1. 从Geofabric下载 .osm.pbf 文件。要下载自定义区域,您可以使用ProtomapsBBBike Extract

  2. 下载瓷砖制造商

  3. 执行以下命令

tilemaker --input netherlands.osm.pbf --output netherlands.mbtiles --process resources/process-openmaptiles.lua --config resources/config-openmaptiles.json 

您可以在这篇博文中了解更多信息 - https://blog.kleunen.nl/blog/tilemaker-generate-map

  1. 要使用您在 Mapbox Studio 中创建的相同样式,您可以通过单击共享 -> 下载来下载您的样式的 JSON 文件。此 zip 将包含您的 JSON 文件,其中描述了您自定义的所有颜色等。

如果您打算在 Android 应用程序上显示此 MBTile,您只需将您下载的 JSON 和 MBTiles 文件嵌入应用程序中,并将 JSON 指向 MBTiles 文件。我已经在这篇博文中写了如何做到这一点。我试图使 JSON 工作,但经过一些编辑后才部分成功。但是理想情况下,它应该可以工作,因为它基于openmaptiles 模式

于 2021-08-19T19:38:21.217 回答