聚类时从 Leaflet.markercluster 中删除标记

问题描述

如果标记聚集,如何删除它们?因为如果它们被分组,则无法删除。但是一旦分组消失,那么一切都很好。

在尝试删除之前:

before deleted

删除成功后:

after deleted

添加标记代码

var markers = L.markerClusterGroup();
map.addLayer(markers);

L.geoJSON(data,{
                pointToLayer: pointToLayer,onEachFeature: onEachFeature,})
            .on('click',markerOnClick)
            .addTo(markers);

删除标记代码

$.each(markers._map._layers,function (ml) {
    if (markers._map._layers[ml].feature) {
        if(markers._map._layers[ml].feature.properties.obj == 2 && markers._map._layers[ml].feature.properties.type == 1){                      
             markers.removeLayer(this);
        }            
    }
});

解决方法

只需使用 markers 标记集群组上的 eachLayer method 迭代每个子标记(无论它们当前是否已集群)。

markers.eachLayer(layer => {
  if(layer.feature.properties.obj == 2 && layer.feature.properties.type == 1) {                      
    markers.removeLayer(layer);
  }
});

访问 markers._map._layers 时,您会查找地图上当前的每个图层,但是 Leaflet.markercluster 会在您的标记聚类时删除它们(并用集群标记替换它们)。这就是您不再找到某些标记的原因。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...