Leaflet 单张标记群集在单击父群集时向所有子群集添加自定义图标

Leaflet 单张标记群集在单击父群集时向所有子群集添加自定义图标,leaflet,leaflet.markercluster,Leaflet,Leaflet.markercluster,我有多个级别的标记簇(子簇可以有簇等等) 现在,当我单击一个父集群时,我想将一个自定义图标应用于子集群底部的父集群的所有子集群 我尝试收集所有子集群并对其应用图标,但没有效果 cluster.on('clusterclick',(e)=>{ const childClusters=e.layer.\u childClusters; for(子簇的常数c){ c、 options.icon=this.getSelectedClusterIcon(); } }); 如果我理解正确,您希望更改单击的“

我有多个级别的标记簇(子簇可以有簇等等)

现在,当我单击一个父集群时,我想将一个自定义图标应用于子集群底部的父集群的所有子集群

我尝试收集所有子集群并对其应用图标,但没有效果

cluster.on('clusterclick',(e)=>{
const childClusters=e.layer.\u childClusters;
for(子簇的常数c){
c、 options.icon=this.getSelectedClusterIcon();
}
});

如果我理解正确,您希望更改单击的“子”群集的外观,即放大时显示的群集(但不是放大到足够远时最终显示的单个标记)

在这种情况下,您可以使用传单.markercluster和:

  • 使用
    iconCreateFunction
    创建MCG,该函数依赖于一些标志来生成不同的图标
  • 在单击事件侦听器中,使用某种标志标记所有单个子标记。正如Ivan所指出的,您可以使用来检索这些标记
  • 使用请求MCG在这些标记的父簇上重新评估您的
    iconCreateFunction
  • 如果要更改仅属于某个缩放级别的簇的图标(例如,单击的簇和/或直接子簇的更高级别),可以将这些缩放级别存储在某些状态中,并将其与
    iconCreateFunction
    中簇的
    \u zoom
    属性进行比较
  • 如果要重置集群,只需清除标志并再次调用
    refreshClusters
    方法
  • 类似于:

    const mcg=L.markerClusterGroup({
    iconCreateFunction(群集){
    const ishighlight=cluster.getAllChildMarkers().some((marker)=>marker.flaggedZooms&&marker.flaggedZooms[cluster.\u zoom]);
    返回ishighlight?myIconHighlighted:myNormalIcon;
    },
    }).on(“群集单击”,功能(e){
    //如果我们想重置所有其他集群
    mcg.eachLayer((marker)=>删除marker.flaggedZooms);
    const cluster=e.layer;
    //在子标记上标记缩放级别,
    //如果我们只想在某些缩放上更改群集图标
    for(cluster.getAllChildMarkers()的常量标记){
    marker.flaggedZooms=marker.flaggedZooms | |{};//如果尚未完成,则初始化
    marker.flaggedZooms[cluster.\u zoom+1]=true;//如果需要,标记其他缩放级别
    }
    //确保重新绘制群集图标
    mcg.refreshClusters();
    });
    
    为什么不使用有文档记录的
    getAllChildMarkers()
    方法?谢谢@ghybs,让我试试这个。