http://storelocator.googlecode.com/git/examples/dynamic.html
我正在使用动态StoreLocator,完全按照演示中的说明进行一些调整:
使用以下代码:
将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中的标记函数包装到Clusterer来修复它,但由于它是高度匿名化而无法这样做。
答案 0 :(得分:2)
我也遇到了这个问题,但我必须以不同的方式解决它。我尝试使用您的代码,但我的性能下降,因为对于商店定位器中的每个商店,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);
}
}
});
答案 1 :(得分:0)
管理以识别StoreLocator用于将标记添加到地图并将MarkerClusterer代码环绕的关键函数。 遗憾的是,如果不稍微更改StoreLocator,则无法添加每个标记并避免清除和重置所有内容。 但是添加一个简单的返回addStoreToMap以返回可以实现的标记。
google.maps.event.addListenerOnce(_googleMap, 'bounds_changed', function() {
_googleClusters = new MarkerClusterer(_googleMap);
_googleView.addStoreToMapB = _googleView.addStoreToMap
_googleView.addStoreToMap = function (a) {
var b = _googleView.addStoreToMapB(a);
_googleClusters.clearMarkers();
_googleClusters.addMarkers(_googleView.c);
}
});