To load layer on leaflet even on offline

时间:2016-08-31 12:32:31

标签: ionic-framework leaflet

I'm using leaflet map in my ionic application.

On offline, by default, open street map layer loads but when changing the zoom level, the map disappears.

How can I get the map to show when zoomed offline?

1 个答案:

答案 0 :(得分:0)

您需要下载(预缓存)磁贴图像才能使用离线模式。

以您想要的缩放级别下载切片。地图数据非常大,因此您可能希望限制为一小部分缩放级别或地理边界(城市,国家等)

OSM的特定磁贴使用政策位于:http://wiki.openstreetmap.org/wiki/Tile_usage_policy但适用于您的应用的部分是:

  

特别是,以缩放级别下载重要区域的图块   在没有事先的情况下禁止离线或以后使用17和更高版本   咨询系统管理员。

该页面还列出了许多“免费”磁贴提供商。因为我希望它会随着时间的推移而“显着”改变,所以我不会复制并粘贴它。

除非您与磁贴提供商签订某种合同/协议,否则您可能需要自己渲染或找到一个不同的磁贴服务,以便您预先缓存磁贴。

可以在OSM网站上找到下载可以呈现为图块的地图数据的详细信息:http://wiki.openstreetmap.org/wiki/Downloading_data

有多种方法可以从OSM获取数据,但这些服务和选项无疑会随着时间的推移而发生变化,所以我认为最安全的是只要参考他们的网站(谷歌“下载开放的街道地图数据”,如果上面的链接被破坏)

我使用了一个名为BruTile的.NET库来管理磁贴缓存。但基本上它只是一组以缩放/网格结构组织的图像文件。

谷歌搜索主题,例如“离子传单瓦片缓存”和“预缓存地图瓦片离子”等也是有益的。目前还没有很多,但这是一个不断发展的领域。

关于移动应用的想法

如果要部署到移动设备,部署预缓存的磁贴可能没有意义,因为(a)它们将变得过时并需要持续维护,以及(b)文件太大会导致下载速度变慢。在安装应用程序后,最好在线下载磁贴。

Windows和Android手机都允许在地图应用中下载离线地图数据。有可能利用这些数据。否则,您将使您的应用程序工作类似:提示用户下载其区域的地图,然后找到合理指定他们需要地图的区域(地理区域)的方法。让用户知道将为计量数据计划和设备存储下载多少数据也是一个好主意。

使用OSM服务器以外的服务器(例如付费Microsoft或MapQuest或Bing帐户)也会更好。 OSM服务器无法处理希望地图脱机工作的每个SPA的生产负载。如果可能的话,最好依靠设备的功能和内置的地图应用程序。亚马逊和Azure(例如)服务可能是可行的。如果您编写自己的程序以在自己的服务器上作为服务运行,它可以预先缓存来自磁贴服务的磁贴(从而降低您的使用费和服务器负载),然后应用程序只会从您的服务器获取地图数据。这也让您有机会通过自己的自定义图块获得创意。