2014-02-20 22 views
0

http://storelocator.googlecode.com/git/examples/dynamic.html與StoreLocator和MarkerClusterer混合問題

我使用的是動態StoreLocator谷歌地圖API完全一樣呈現在演示了一些調整:

  1. 改變了JSON我自己。
  2. 添加標記聚類器與婁代碼地圖:

    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

你能提供完整的代碼,一個jsfiddle展示問題或鏈接到一個頁面嗎? – geocodezip

+0

添加到問題的鏈接。 – transilvlad

回答

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