Javascript API V3上的Google Maps ClusterManager无法重新加载/初始加载
我试图使用Google Maps V3 API ClusterManager从将地图上的标记聚集在一起,但我在代码中遇到了与原始网站相同的错误-第一次加载或重新加载页面时出错: 未捕获的TypeError:无法调用未定义ClusterManager_v3.js:586的方法“fromLatLngToPoint” ClusterManager.latlngToPoint ClusterManager_v3.js:586 ClusterManager.\u getMarkerBounds ClusterManager\u v3.js:645 ClusterManager.\u cacheMarkerIcon ClusterManager\u v3.js:580 ClusterManager.update ClusterManager_v3.js:345 匿名函数ClusterManager_v3.js:91 它在初始加载后工作正常,因此我相当确定这是因为时间问题-例如,地图或标记在使用前没有初始化。不幸的是,我无法找到一种等待一切初始化的方法,因为Javascript不是我的第一语言。欢迎任何帮助或指点。该网站的源代码与我使用的代码几乎完全相同 更新: 如果发现更改行:Javascript API V3上的Google Maps ClusterManager无法重新加载/初始加载,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我试图使用Google Maps V3 API ClusterManager从将地图上的标记聚集在一起,但我在代码中遇到了与原始网站相同的错误-第一次加载或重新加载页面时出错: 未捕获的TypeError:无法调用未定义ClusterManager_v3.js:586的方法“fromLatLngToPoint” ClusterManager.latlngToPoint ClusterManager_v3.js:586 ClusterManager.\u getMarkerBounds Clus
cm._requestUpdate(50);
到
防止了错误。将其更改为150会导致错误发生3/10次。我不完全确定这是一个修复方案,但可能是这样,所以我将此贴在这里,以防万一其他人有更好的解决方案或想知道我的解决方案。对于使用方法,它必须初始化。将在创建投影时触发投影\u更改事件。只有在创建投影后,才能使用map.getProjection。因此,我的建议是,添加事件的侦听器,并在调用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);
});
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);
});