http://storelocator.googlecode.com/git/examples/dynamic.html

我使用的是与演示中完全相同的动态StoreLocator,但进行了一些调整:


将JSON更改为我自己的。
使用以下代码将Marker Clusterer添加到地图:

google.maps.event.addListener(_googleMap, 'idle', function() {
  if(typeof _merketClusterer == 'object') {
    _googleClusters.clearMarkers();
  }
  _googleClusters = new MarkerClusterer(_googleMap, _storeLocatorView.c);
});



因为MarkerClusterer和StoreLocator都依赖于地图事件,所以看来集群显示了,并且一瞬间之后,标记又从StoreLocator中出现。

任何人都知道在StoreLocator完成地图更新后如何触发MarkerClusterer吗?

此处的示例:http://jsfiddle.net/Z6WHR/

您需要移动地图以开始聚类,并且标记会向后显示。

我对此进行了更深入的研究,并认为我可以通过将StoreLocator中的标记功能包装到集群器中来修复它,但由于高度匿名而无法这样做。

最佳答案

我也遇到了这个问题,但是我不得不以不同的方式解决它。我尝试使用您的代码,但性能下降,因为对于商店定位器中的每个商店,MarkerCusterer都会清除标记,然后再次添加它们。

因此,我对您的代码进行了一些更改,现在可以正常使用了!

google.maps.event.addListenerOnce(map, 'bounds_changed', function() {
        googleClusters = new MarkerClusterer(map);
        view.addStoreToMapB = view.addStoreToMap;
        var i = 0;
        view.addStoreToMap = function (a) {
            i++;
            var b = view.addStoreToMapB(a);
            if(i == view.stores.length){
                i = 0;
                var markers = [];
                googleClusters.clearMarkers();
                for(marker in view.markerCache_){
                    markers.push(view.markerCache_[marker]);
                }
                googleClusters.addMarkers(markers);
            }
        }
    });

关于javascript - 带有StoreLocator和MarkerClusterer混合的Google Maps API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21907427/

10-12 20:19