加权标记聚类器

6
谷歌地图拥有一个很好的功能叫做标记聚合器 (Marker Clusterer),它允许您对一组标记应用基于网格的聚类。
标记聚合器将每个标记都视为一个,并统计网格中标记的数量。与此不同,我想为每个标记分配一个权重,并在聚类中加总这些权重。在谷歌地图API中是否可能实现?您知道是否有其他JavaScript库提供类似的功能吗?

你可以修改Marker Clusterer库来实现这个功能。 - Anto Jurković
为每个标记分配权重并将它们相加应该很容易,因为每个标记都应该是您在数据库或其他地方存储的“lat lng”对,所以您只需沿着坐标设置权重值。由于您需要循环获取所有这些标记,因此您可以同时获取权重并将它们相加到一个临时变量中。问题主要在于如何显示该权重。 - aleation
1个回答

7

这并不像看起来那么复杂。

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. initialize the clusterer without markers:

    var markerCluster = new MarkerClusterer(map); 
    
  2. set the function

    markerCluster.setCalculator(calc);
    
  3. add the markers:

    markerCluster.addMarkers(markers);
    

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

陷阱:计算器函数将不得不遍历所有标记(默认情况下它不会,它只基于标记数组的长度进行计算)。这将影响MarkerClusterer的性能,特别是当您有很多标记时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接