有没有一种方法可以在Ionic混合移动应用程序上保存离线Google地图?

12

我计划使用ionic开发混合移动应用程序。我需要的功能之一是离线谷歌地图。有没有方法可以做到这一点?


你有关于这个的任何消息吗? - Bir
@bir 我目前还没有得到任何东西。 - Arelancelot
@user3624533 您最近有任何进展吗? - hreimer
1个回答

7
这取决于您的应用程序要求是否可能。您的用户是否使用“现代”设备,即HTML5是否完全支持?您的用户需要全球查看/编辑地图,还是仅在特定区域内?地图真的需要由谷歌提供吗?我将在下面解决一些问题,以指导您解决此问题。 您真的需要谷歌地图吗?(最优方案)首先,您真的需要谷歌地图吗?另外相关的问题是:您的用户需要缩放地图多远?如果可以使用任何地图,并且缩放不是高优先级的(如果是,包括所有地图瓦片将使应用程序使用所有存储空间),则可以将地图瓦片作为应用程序的打包部分,并使用类似http://leafletjs.com/的库显示它们。该库有很好的文档,并为各种地图提供地图界面。可以配置此库以使用您自己的本地地图瓦片。如果需要,可以包括多个缩放级别的地图瓦片,并将最小/最大缩放级别限制为实际可用的瓦片。这将使您的地图脱机工作。

我无法或不想提供自己的地图瓦片确保您真正探索了选项,有些系统提供可用的地图瓦片(例如,请查看https://www.mapbox.com/
好的,所以您真的不想执行我建议的操作。现在有哪些选项?JavaScript映射解决方案通常基于要查看的地图位置和缩放级别来呈现瓦片。这些瓷砖是从瓷砖提供商请求的。我不知道如何为Google准确实现此功能,您可能需要进行一些研究-我将尝试帮助您确定一个方向。会有请求从服务器获取瓦片。我检查了http://maps.google.com,尝试浏览地图时加载的图片:(示例(点击))。找出您情况下使用的网址,稍后我们将需要这些网址(只需检查浏览器控制台中的网络选项卡,查看滚动地图时进行了哪些请求)。当我们仅需要用户在某个区域离线工作时,我们可以使用服务工作者在在线时缓存这些请求的响应,并在离线时提供这些缓存。在此处阅读更多关于服务工作者的信息(点击此处)
优点:对于您以前访问过的任何瓦片具有真正的离线地图功能(只要您的缓存没有溢出,这取决于服务工作者的实现方式以及支持服务工作者的浏览器/设备)。
缺点:不支持从未放入缓存的瓦片(也就是说:之前从未见过)。另一个缺点:这仅适用于支持服务工作者的设备。在您不关心用户使用“旧”设备或者您可以控制用户设备选择的情况下,这可能是一个选项。请注意,在此处使用Crosswalk能够减轻您的开发工作,因为您只需考虑一个浏览器运行时:但是,Crosswalk也不支持旧设备。
然而:对于需要在特定区域工作的人来说,这个解决方案可能很好。如果您或您的用户事先知道需要在哪里工作,您可以指导/帮助他们正确加载和缓存地图。

如果您无法使用这两种解决方案之一,那么我非常怀疑是否有其他方法可以实现。就我所知,没有其他更好的方法了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接