5

Google地圖有一個很好的功能,稱爲Marker Clusterer,它允許您將基於網格的集羣應用於標記集合。加權標記集羣

Marker Clusterer將每個標記都統計爲一個,它總結了網格中標記的數量。不同的是,我想爲每個標記分配一個權重,並在羣集中總結這些權重。 Google Maps API有可能嗎?你知道任何其他提供類似功能的JavaScript庫嗎?

+0

您可以爲此修改Marker Clusterer庫。 –

+0

爲每個標記賦予權重並將其加總應該很容易,因爲每個標記都應該是一個'lat lng'對,您可以將其存儲在數據庫或其他東西中,所以您只需沿着座標設置權重值,所有那些你需要一個循環的標記,你也可以獲取權重,然後在一個時間變量中求和它們。問題將主要是顯示重量。 – aleation

回答

5

它不像看起來那麼複雜。

markerclusterer庫提供了覆蓋計算器函數(這是將構建集羣圖標的函數)的選項。

商店重量爲標誌的屬性,如:

new google.maps.Marker({position:new google.maps.LatLng(1,2),weight:8}); 

計算器功能可能看起來像這樣:

var calc=function(markers, numStyles) { 
     var weight=0; 

     for(var i=0;i<markers.length;++i){ 
     weight+=markers[i].weight; 
     } 
     return { 
     text: weight, 
     index: Math.min(String(weight).length, numStyles) 
     }; 
    } 

若要將此自定義函數:

  1. 初始化沒有標記的聚類器:

    var markerCluster = new MarkerClusterer(map); 
    
  2. 設置功能

    markerCluster.setCalculator(calc); 
    
  3. 添加標記:

    markerCluster.addMarkers(markers); 
    

演示:http://jsfiddle.net/doktormolle/H4EJu/

的陷阱:計算器功能將不得不遍歷所有標記(默認情況下它不會,它只計算基於marker-array的長度)。這會影響MarkerClusterer的性能,特別是當您有很多標記時。