离线使用 Mapbox GL

Posted

技术标签:

【中文标题】离线使用 Mapbox GL【英文标题】:Using Mapbox GL Offline 【发布时间】:2015-04-04 12:52:42 【问题描述】:

有没有办法在离线设置中使用 Mapbox GL(询问 JS 和原生)?使用 MBTiles,您可以使用 MBTiles 文件或提取光栅图像。我想知道是否有任何类似的东西可以让 Mapbox GL 从本地源加载数据,而不是需要与 Mapbox 的服务器建立网络连接。不仅仅是在谈论用户离线时缓存数据,而是实际上制作了一个始终完全离线运行的地图。谢谢。

【问题讨论】:

【参考方案1】:

还没有,但这至少在原生的开发路线图上:

https://github.com/mapbox/mapbox-gl-native/issues/584

在浏览器中使用 javascript 比较棘手,并不是真正的核心用例,但也许可以做到。

【讨论】:

谢谢。我还发现这对 Mapbox GL JS 很有帮助:gis.stackexchange.com/questions/125037/… 看来我可以使用 sqlite 扩展来按需从 MBTiles 中提取 PBF,或者使用 mbutil 预先提取它们并以类似于 PNG 的方式提供静态服务。【参考方案2】:

离线 MapBox GL JS 示例(完全托管在自定义服务器上,在本例中为 GitHub gh-pages)可见于:

http://klokantech.github.io/mapbox-gl-js-offline-example/

从 MBTiles 解压出来的 javascript、css、字体甚至是预渲染的矢量图块可能只是在一个目录中,您就可以得到可缩放的矢量图。

如果您想在网上某个地方免费托管带有矢量或光栅图块的 MBTiles,最简单的方法可能是:https://github.com/klokantech/tileserver-php/

在使用矢量图块时,我在这两个存储库中记录了大部分用例:

https://github.com/klokantech/vector-tiles-sample https://github.com/klokantech/mapbox-gl-js-offline-example

【讨论】:

谢谢。我认为基于浏览器的实现 Tilelive 也很好:github.com/mapbox/tilelive 我特别关注如何在 Apache Cordova 中执行此操作并分叉 Mapbox GL JS,并制作了一个可以在 Javascript 中使用 SQLite 从 MBTiles 加载的版本:github.com/trevorpowell/mapbox-gl-js-cordova-offline github.com/trevorpowell/mapbox-gl-js-cordova-offline-example【参考方案3】:

您可以在此处找到适用于 ios 的预打包/离线地图示例项目:

http://github.com/jaysquared/mapbox-gl-ios-offline-example

我基本上只是在 iOS 应用程序中运行一个网络服务器并提供磁贴。适用于矢量和图像图块。

【讨论】:

【参考方案4】:

MBTiles 可以在 Mapbox Maps iOS SDK 中显示,方法是在您的应用中托管一个 Web 服务器并将地图指向 localhost。我在这里发布了我的解决方案:

https://gist.github.com/namannik/3b7c8b69c2d0768d0c2b48d2ed5ff71c

此解决方案与@jaysquared.com 发布的解决方案之间的区别在于,此解决方案不需要style.json

【讨论】:

以上是关于离线使用 Mapbox GL的主要内容,如果未能解决你的问题,请参考以下文章

开源方案搭建可离线的精美矢量切片地图服务-5.Mapbox离线项目实现

地图框中的离线轮流导航

MapBox GL Android:来自自定义图块源的离线地图已下载但未使用

开源方案搭建可离线的精美矢量切片地图服务-6.Mapbox之.pbf字体库

一个应用程序中的两个独立地图提供程序

一步一步制作一幅Mapbox Style风格的园区地图