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的性能,特别是当您有很多标记时。