6

我有一个基于网络的地图,它使用jquery-ui-mapmarkerclusterer插件来制作谷歌地图。

我过滤掉应该显示或不显示哪些标记,然后更新地图。

我需要创建一个未聚集标记的列表,因此为此需要一种方法来根据标记检查集群并找出哪些未聚集。

有什么技术可以做到这一点吗?

我试图循环浏览集群并手动检查集群的标记,但收到错误消息,告诉我集群属性var_clusterer.clusters_未定义。

4

3 回答 3

8

注意:此解决方案使用MarkerClusterPlus

您可以使用 getClusters() 方法将当前由 MarkerClusterer 处理的所有集群对象组成一个数组。

var clusterManager = new MarkerClusterer( googleMap, markersArray, clusterOptions ); // setup a new MarkerClusterer

var clusters = clusterManager.getClusters(); // use the get clusters method which returns an array of objects

for( var i=0, l=clusters.length; i<l; i++ ){
    for( var j=0, le=clusters[i].markers_.length; j<le; j++ ){
        marker = clusters[i].markers_[j]; // <-- Here's your clustered marker
    }
}

使用 getClusters() 获取数组后,遍历集群对象。对于每个集群,您可以拉出当前markers_数组并检索您的集群标记。

getClusters() 现在在文档中:MarkerClustererPlus 文档

于 2012-01-02T12:53:41.810 回答
4

注意:使用MarkerClustererPlus v2.1.10

isMarkerClustered(marker: Marker, clusterer: MarkerClusterer): boolean {
   const clusters = clusterer.getClusters();
   for (let i = 0, l = clusters.length; i < l; i++) {
      const markers = clusters[i].getMarkers();
      for (const m of markers) {
        if (m === marker && markers.length > 1) {
          return true;
        }
      }
    }
    return false;
}
于 2018-07-26T13:55:58.970 回答
2

一个轻微的转储,但有效的方法....

您可以将标记单独插入到 Marker Clusterer 对象中,并立即 (1) 之前和 (2) 之后调用其 .getTotalCluster() 方法以查看新添加的标记是否会进入集群。

我使用这种方法,在 getClusters() 对我不起作用之后,也许我没有通过 jquery 使用它。

var old_cluster_val = markerCluster.getTotalClusters(); // <-----(1)
     markerCluster.addMarker( marker );
var new_cluster_val = markerCluster.getTotalClusters(); // <-----(2)

if (old_cluster_val == new_cluster_val) {
    in_a_cluster.push(marker);  
} else {
    not_in_cluster.push( marker );
}
于 2012-05-03T23:15:36.650 回答