谷歌地图v3:如何强制重新加载瓷砖

时间:2012-08-29 08:14:19

标签: google-maps google-maps-api-3

我遇到了非常讨厌的问题。我开始测试我的谷歌地图代码与较慢的互联网连接,它不再像它想象的那样工作了。

问题是当我在地图上做动画时我正在监听"tilesloaded"事件因为连接很慢,一些瓷砖可能会挂起并且没有加载..地图中间会有灰色瓷砖,我的程序不会继续因为它等待它被加载。

我使用了firebug控制台来捕获错误,它说:

图片损坏或截断:https://mts0.googleapis.com/vt?lyrs=m@183000000&src=apiv3&hl=fi-FI&x=18706&y=8527&z=15&s=Galil&style=api%7Csmartmaps

我将其粘贴到浏览器并从那里找到了丢失的图块图像。弄它!它存在但有时不加载:)

所以问题是如何在一段时间后强制重新加载丢失的瓷砖或所有瓷砖,据我所知,如果某些瓷砖不能触发这样的事件将会被触发被装?似乎总是给出控制台上出现的错误。我也尝试使用谷歌地图的"idle"事件,但它不会等待瓷砖加载,并会使程序继续作为滞后。 (不是我想要的东西。)

我也在使用google.maps.event.trigger(my_map, 'resize');,但它似乎有所帮助。

修改

刷新整页不是一个选项,因为我会丢失我的变量等的值。这种缓慢的加载很难测试,但是当平移到地图上的某个特定点时,就会发生瓦片需要重新加载。 / p>

有什么想法吗? Thnx提前!

4 个答案:

答案 0 :(得分:3)

在javascript地图中响应浏览器调整大小,并加载丢失的图块,所以你需要的只是触发浏览器事件“调整大小”

var evt = document.createEvent('UIEvents');
evt.initUIEvent('resize', true, false,window,0);
window.dispatchEvent(evt);

答案 1 :(得分:2)

V3 API中无法访问基本地图,因此您可以做的就是销毁地图对象(map = null)并创建一个新的相同对象。成功下载的切片仍应位于浏览器的缓存中。

答案 2 :(得分:0)

首先,这听起来像一个错误(如果超时,API应该重试获取磁贴)。请在issue tracker上提交。

您可以通过向map通知mapTypeId属性的更改来触发刷新。

google.maps.event.notify(map, 'mapTypeId')

答案 3 :(得分:0)

是的,你绝对可以使用map.setZoom(0)。当我适应新边界时,我使用此函数强制我的图块重绘:

export function setBounds(bounds) { map.setZoom(0); // forces tiles to invalidate google.maps.event.addListenerOnce(map, 'idle', () => map.fitBounds(bounds)); }

我这样做是因为我不喜欢图书馆默认使用的平滑缩放效果。