2

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

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

我用萤火虫控制台捕捉错误,它说:

图片损坏或截断: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');,但它似乎没有帮助。

编辑:

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

有任何想法吗?提前谢谢!

4

4 回答 4

3

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

var evt = document.createEvent('UIEvents');
evt.initUIEvent('resize', true, false,window,0);
window.dispatchEvent(evt);
于 2014-05-28T22:25:53.323 回答
2

There is no access to the base maps in the V3 API, so all you can do is to destroy your map object (map = null) and create a new identical one. The tiles that were successfully downloaded should still be in the browser's cache.

于 2012-08-29T09:48:40.357 回答
0

首先,这听起来像是一个错误(如果它们超时,API 应该重试获取磁贴)。请在问题跟踪器上归档。

您可能可以通过通知地图对 mapTypeId 属性的更改来触发刷新。

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

于 2012-09-05T04:04:39.683 回答
0

是的,您绝对可以使用map.setZoom(0). 当我适应新的界限时,我使用这个函数来强制我的图块重绘:

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

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

于 2018-03-16T08:20:25.297 回答