我有一个基于网络的地图,使用jquery-ui-map和markerclusterer插件制作谷歌地图。
我会过滤掉哪些标记应该显示,然后更新地图。
我需要创建一个非聚集标记列表,所以为此需要一种方法来检查聚类与标记,并找出哪些不是聚类。
有没有什么技巧可以做到这一点?
我尝试循环遍历群集并手动检查群集中的标记,但是收到错误告诉我未定义群集属性var_clusterer.clusters_
。
答案 0 :(得分:7)
注意:此解决方案使用MarkerClustererPlus库
您可以使用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 docs
答案 1 :(得分: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 );
}
答案 2 :(得分:2)
注意::使用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;
}