如何将mapbox工作室地图导出为.mbtiles文件



所以我猜答案是"没有",但有什么方法可以导出我在mapbox studio在线设计的地图吗(https://www.mapbox.com/studio/)到.mbtiles文件中,以便我自己主持它?

老实说,我愿意为此花钱(省去了获取world.pbf文件并将其放入postgresqldb的麻烦,尤其是对于像我这样的普通计算机来说,这真的很痛苦)

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

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

但是,如果可以回退到光栅分幅,则有一个部分解决方案。或者,您可以从OSM数据而不是从地图箱服务器获取矢量mbtile。

mapbox离线支持android/ios

我在2017年4月联系了mapbox的支持人员,他们告诉我,尽管你可以从mapbox工作室下载的样式文件不包含瓷砖,但有一种方法可以让它们在Android/iOS上离线渲染。

如果您想离线使用Mapbox地图,您需要根据您的平台,按照Android或iOS显示的示例进行操作。从本质上讲,移动SDK接受一个样式URL,该URL指向在Mapbox Studio中创建的自定义样式,并且SDK处理保持地图离线所需的所有其他资源(字体、图标、波浪形符等)的下载。查看我们的离线地图指南,了解更多关于如何工作的信息。

链接:

  • 使用MapBox的离线地图
  • Mapbox Android SDK离线示例
  • Mapbox iOS SDK离线示例

快速查看示例代码,瓷砖的下载似乎是在应用程序中完成的,但提前完成,例如,在安装应用程序后,您仍然有网络连接。关于您的账单问题,我没有立即看到您的Mapbox API密钥是否参与了此次下载。每个脱机区域有6000个脱机磁贴限制。

不适用于桌面:该网站还提到,离线不是MapboxGl JS的选项,所以你必须破解它,才能在桌面web浏览器上使用你的离线区域。

mapbox工作室导出为mbtiles

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

github项目,https://github.com/klokantech/vector-tiles-sample,提供了指向项目/工具的链接,这些项目/工具可以将mbtile文件分解为包含的pbf文件,这些文件是每个矢量tile的protobuf压缩格式(https://github.com/mapbox/mbutil)。有点过时。

另一种可能有效的方法是,提前缓存从MapBox检索到的每个瓦片的网络请求,然后在您的APP代理中将请求缓存到您的缓存中。不过,我不确定这是否对ToS不利。您可能必须使用要缓存的所有XYZ坐标进行编程。

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

您可以使用tipecanoe创建矢量瓦片(并自己承载它们)。我知道这不是MapBox。但从长远来看,这可能会让你走得更远。

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

您创建的mbtile可以对其进行分层,并可能使用开源maputnik(有点像mapbox的样式编辑器)对其进行样式设置。然后,你用自己的服务器获取serve mbtiles,并将你的风格插入mapboxGL js或openlayers。

平铺填充--(.mbtiles与光栅平铺)回退

还有TileMill,它仍然可用(但已弃用),在桌面上运行,并允许您从shapefile创建地图(例如,您可以在https://mapzen.com/data/metro-extracts/)。

TileMill,将在过程结束时为您提供一个mbtiles文件。不过,该mbtile包含光栅tile,而不是矢量tile。矢量瓷砖可以动态设置样式,所以当你想用字体适应各种情况或调整照明时,它在移动设备上很好。

光栅平铺可能就足够了,因为在您的应用程序中,您可能能够在基本层的顶部渲染其他交互式对象。OpenLayers是一个可移植的框架,您可以在其中做到这一点,例如,允许用户绘制对象或单击您从数据库中加载的兴趣点,而不是地图数据。

获取基于OSM的矢量瓦片,而不是地图框

现在似乎有了Vector瓷砖的替代制造商,http://openmaptiles.org(过去http://osm2vectortiles.org)。

您可以访问此处,下载您选择的城市的mbtiles文件,例如:https://openmaptiles.org/downloads/#city,然后通过互动程序服务器为您的应用程序提供该文件(本地)。(或者使用上面提到的工具之一将其分解为单独的pbf文件,并从本地磁盘/内存中读取文件)

使用这种方法,您可以将OSM中的矢量mbtiles与您在mapboxstudio中创建的样式相结合(mapboxstudios允许您下载带有.json样式的zip文件),并且您仍然可以使用MapBoxGL来显示它。

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

据我所知,Mapbox不提供地图下载。您可以使用矢量图块API直接下载矢量图块,并根据您的矢量图块计数收费。每月免费提供20万块瓷砖。在我的实验中,80K瓷砖代表了大约200平方公里的面积。因此,大面积的免费瓷砖很快就会用完,每增加10公里平方公里就必须支付1美元。(所有非常近似的值均基于标称观测值)。此外,还需要将.mvt文件实际打包为MBTiles格式。

我建议换一种方式。

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

  1. 从Geofabric下载.osm.pbf文件。要下载自定义区域,您可以使用Protomaps或BBBike 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指向MBTile文件。我已经在这篇博客文章中写了如何做到这一点。我试图使JSON工作,但经过一些编辑后仅部分成功。然而,理想情况下,它应该工作,因为它基于openmaptiles模式。

最新更新