我遇到了非常讨厌的问题。我开始测试我的谷歌地图代码与较慢的互联网连接,它不再像它想象的那样工作了。
问题是当我在地图上做动画时我正在监听"tilesloaded"
事件因为连接很慢,一些瓷砖可能会挂起并且没有加载..地图中间会有灰色瓷砖,我的程序不会继续因为它等待它被加载。
我使用了firebug控制台来捕获错误,它说:
我将其粘贴到浏览器并从那里找到了丢失的图块图像。弄它!它存在但有时不加载:)
所以问题是如何在一段时间后强制重新加载丢失的瓷砖或所有瓷砖,据我所知,如果某些瓷砖不能触发这样的事件将会被触发被装?似乎总是给出控制台上出现的错误。我也尝试使用谷歌地图的"idle"
事件,但它不会等待瓷砖加载,并会使程序继续作为滞后。 (不是我想要的东西。)
我也在使用google.maps.event.trigger(my_map, 'resize');
,但它似乎有所帮助。
修改
刷新整页不是一个选项,因为我会丢失我的变量等的值。这种缓慢的加载很难测试,但是当平移到地图上的某个特定点时,就会发生瓦片需要重新加载。 / p>
有什么想法吗? Thnx提前!
答案 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));
}
我这样做是因为我不喜欢图书馆默认使用的平滑缩放效果。