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

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

我试图使用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不是我的第一语言。欢迎任何帮助或指点。该网站的源代码与我使用的代码几乎完全相同

更新:

如果发现更改行:

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);
});