API V3上的Google Maps ClusterManager无法重新加载/初始加载

时间:2012-04-09 03:54:02

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

我正在尝试使用http://cm.qfox.nl/中的Google Maps V3 API ClusterManager将地图上的标记聚集在一起,但我在代码中遇到与原始网站中相同的错误 - 这是一个错误页面第一次加载,或重新加载:

Uncaught TypeError: Cannot call method 'fromLatLngToPoint' of undefined ClusterManager_v3.js:586
ClusterManager.latlngToPoint ClusterManager_v3.js:586
ClusterManager._getMarkerBounds ClusterManager_v3.js:645
ClusterManager._cacheMarkerIcon ClusterManager_v3.js:580
ClusterManager.update ClusterManager_v3.js:345
(anonymous function) ClusterManager_v3.js:91

在初始加载后它工作正常,所以我很确定这是因为时间问题 - 例如,地图或标记在使用之前没有初始化。不幸的是,我无法找到一种等待一切初始化的方法,因为Javascript不是我的第一语言。任何帮助或指示都是最受欢迎的。来自网站的来源是我几乎完全使用的代码。

更新:

如果发现改变了行:

cm._requestUpdate(50);

cm._requestUpdate(250);

防止错误。将其更改为150导致错误发生3/10次。我不完全确定这是一个解决方案,但也许我会离开这个,以防万一其他人有更好的解决方案或想知道我的。

1 个答案:

答案 0 :(得分:0)

对于使用Projection方法,必须初始化它。 "projection_changed"会在Projection创建时触发map.getProjection()事件。之后您可以使用"projection_changed"。所以我的建议是,添加ClusterManager事件的侦听器,并在调用它时初始化google.maps.event.addListenerOnce(map, 'projection_changed', function(){ var cm = window.cm = new ClusterManager( map, { objClusterIcon: new google.maps.MarkerImage('markers/cluster.png', false, false, false, new google.maps.Size(20,20)), objClusterImageSize: new google.maps.Size(20,20) } ); // now json contains a list of marker positions. lets add them. for (var i = 0; i < json.length; ++i) { ..... } cm._requestUpdate(50); });

{{1}}