You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断MarkerClusterer 2.0.15中标记当前是否处于聚合状态?

判断MarkerClusterer 2.0.15中标记是否处于聚合状态

在新版MarkerClusterer中,虽然没有getClusters这类直接方法,但可以通过以下两种实用方式实现需求:

方法一:直接利用标记的内部关联属性

新版MarkerClusterer在完成聚类后,会自动给被聚合的标记绑定一个cluster属性,指向其所属的Cluster实例。你可以通过这个属性直接判断状态:

// 传入要检测的Google Maps Marker实例
function isMarkerClustered(marker) {
  // 若marker.cluster存在,说明该标记处于聚合状态
  return !!marker.cluster;
}

这个属性会在地图缩放、标记增删等触发聚类更新时自动同步,无需手动维护,是最简洁的实现方式。

方法二:监听聚类事件维护自定义状态映射

如果担心内部属性的稳定性,你可以手动监听MarkerClusterer的clusteringend事件,维护自己的状态映射表:

const markerCluster = new MarkerClusterer({ map, markers });
// 用WeakMap存储,避免内存泄漏
const clusteredMarkerMap = new WeakMap();

// 初始化同步状态
updateClusterStatus();
// 聚类完成后更新状态
markerCluster.addListener('clusteringend', updateClusterStatus);

function updateClusterStatus() {
  clusteredMarkerMap.clear();
  // 获取所有Cluster实例
  const clusters = markerCluster.getClusters();
  clusters.forEach(cluster => {
    const markersInCluster = cluster.getMarkers();
    markersInCluster.forEach(marker => {
      clusteredMarkerMap.set(marker, true);
    });
  });
}

// 自定义判断函数
function isMarkerClustered(marker) {
  return clusteredMarkerMap.has(marker);
}

补充说明

  • 方法一更适合大多数场景,代码简洁且无需额外维护;
  • 方法二更可控,适合需要同时记录标记所属Cluster等额外信息的业务场景;
  • 若需要实时判断状态,确保在clusteringend事件触发后再调用判断函数,保证状态为最新。

内容的提问来源于stack exchange,提问作者Steve Palmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:55:37