Google Maps v3 - 客户端地图瓦片缓存?

16

我正在为一个项目使用Google Maps JS API v3。有没有一种方法可以要求地图在客户端的设备上缓存瓦片,这样当他们刷新浏览器时,就不必再次下载所有瓦片了?

我的许多客户都使用蜂窝移动数据连接,重新下载地图需要相当长的时间。

谢谢!


可能是如何缓存Google地图瓦片以供离线使用?的重复问题。 - givanse
3个回答

12

默认情况下,谷歌地图会返回缓存的图像(您可以在控制台的网络选项卡中看到此选项)。

输入图片描述

如果用户无法缓存图像,则可能是因为他们禁用了缓存。


6
这实际上是通过HTML5及其缓存清单功能实现的。我建议更新这个问题(和答案)。
Google程序员本身已经解决了这个问题,不幸的是信息并没有被很好地传播。
必读资料:
1.首先看看Google Code博客文章:http://googlecode.blogspot.com/2010/04/google-apis-html5-new-era-of-mobile.html 2.然后阅读密苏里州自己的文章:http://blogs.missouristate.edu/web/2010/05/12/google-maps-api-v3-developing-for-mobile-devices/ 技术:
1.您必须缓存Google Maps使用的每个URL
2.使用方法来对抗Chrome和Firefox的固执缓存方法,将其从“离线网站”中删除
3.所有自定义必须在客户端的javascript中进行
按照密苏里州的说法,您的缓存文件将如下所示:
CACHE MANIFEST
/map/mobile/examples/template.aspx
/map/mobile/examples/template.css
/map/mobile/examples/template.js
NETWORK:
http://maps.gstatic.com/
http://maps.google.com/
http://maps.googleapis.com/
http://mt0.googleapis.com/
http://mt1.googleapis.com/
http://mt2.googleapis.com/
http://mt3.googleapis.com/
http://khm0.googleapis.com/
http://khm1.googleapis.com/
http://cbk0.googleapis.com/
http://cbk1.googleapis.com/
http://www.google-analytics.com/
http://gg.google.com/

注意事项

您需要完全基于HTML5,并意识到这将对您的用户产生影响。如果您的用户已经更新了浏览器标准/设备或者您可以控制用户选择,那么这种情况非常方便。

希望这能帮助到您。


可以在 NETWORK:\n*(\n 表示换行)前加上一些内容,列出所有可缓存的内容。编辑:哦,我看到有人误解了 NETWORK 部分,它是指不被缓存的文件。URL 也可以列在上面的列表中。 - Ciantic
是的,NETWORK 部分指定了不应该被缓存且不会离线可用的文件。您可以在此处列出特定的 URL 白名单,或者只使用“*”,允许所有 URL。 - Mithun Sreedharan

5
以前的回答有关于缓存清单功能的,是错误的。如果你在http://www.w3.org/TR/html5/offline.html阅读规范,在“5.7.3缓存清单语法”下,你会看到manifest文件中的NETWORK部分实际上列出不应缓存的资源:
# here is a file for the online whitelist -- it isn't cached, and
# references to this file will bypass the cache, always hitting the
# network (or trying to, if the user is offline).
NETWORK:
comm.cgi

前面的帖子实际上是在说:
1)缓存以下文件:
/map/mobile/examples/template.aspx
/map/mobile/examples/template.css
/map/mobile/examples/template.js

2) 从网络中获取以下内容:

http://maps.gstatic.com/
http://maps.google.com/
http://maps.googleapis.com/
http://mt0.googleapis.com/
http://mt1.googleapis.com/
http://mt2.googleapis.com/
http://mt3.googleapis.com/
http://khm0.googleapis.com/
http://khm1.googleapis.com/
http://cbk0.googleapis.com/
http://cbk1.googleapis.com/
http://www.google-analytics.com/
http://gg.google.com/

2
正确的处理方式是,如果可以在不进行重大修改的情况下进行更正,则应编辑上一个帖子者的答案。否则,您应该在先前的帖子上发表评论,可能会对其进行负面评价,然后提供正确的答案。答案应该是自包含的,而不是其他答案的评论。 - Richard
您的建议是合理的,但不幸的是,用户没有足够的点赞数来跟随。作为读者,我更加重视正确的信息,而不是它在页面上的精确位置,因此在当时只能采取唯一的选择。 - Will

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