Javascript 传单.js:如何从地图中删除多个图层

Javascript 传单.js:如何从地图中删除多个图层,javascript,jquery,checkbox,maps,leaflet,Javascript,Jquery,Checkbox,Maps,Leaflet,我正在使用传单.js制作地图。现在我想从地图上删除添加的图层。通过单击输入按钮,所有选中的复选框应更改为未选中,所有相应的图层应从地图中删除 要从地图中删除图层,需要图层的id。此id等于相应复选框的id。这就是为什么我使用jQuery获取所有选中复选框的ID,并将其值存储在一个对象中,这里称为someObj.idsChecked 当我尝试使用存储值val删除一个层时,当console.log显示所需的值时,它不起作用。这里举个例子:mapcat52 在将之前硬编码的id插入map.remove

我正在使用传单.js制作地图。现在我想从地图上删除添加的图层。通过单击输入按钮,所有选中的复选框应更改为未选中,所有相应的图层应从地图中删除

要从地图中删除图层,需要图层的id。此id等于相应复选框的id。这就是为什么我使用jQuery获取所有选中复选框的ID,并将其值存储在一个对象中,这里称为someObj.idsChecked

当我尝试使用存储值val删除一个层时,当console.log显示所需的值时,它不起作用。这里举个例子:mapcat52

在将之前硬编码的id插入map.removeLayer(mapcat52)等函数时,它会按预期工作

我的代码或想法中的错误在哪里<非常感谢您的帮助

HTML

<input type="button" id="selectnone" value="deselect all" />

<!-- checkboxes  --> 
<input id="mapcat52" type="checkbox" name="maplayer" class="maplayer"> 
<label for="mapcat52">Map Layer One</label>

<input id="mapcat53" type="checkbox" name="maplayer" class="maplayer"> 
<label for="mapcat53">Map Layer Two</label>

...

根据传单API文档,removeLayer接受一个ILayer参数:
removeLayer(layer)
,但您要传递一个字符串:
$(this).attr(“id”)

看起来图层对象已经存在于一个变量中:mapcat52。您可以在创建图层对象时保存它们,然后按id查找它们以传递给removeLayer:

var layers = new Array();

// create layer
var mapcat52 = new MyCustomLayer(latlng);

// save to layers list
layers["mapcat52"] = mapcat52;
...

// remove layers
$.each(someObj.idsChecked, function(id, val) {
    // look up layer object by id
    var layerObj = layers[val];
    // remove layer
    map.removeLayer(layerObj); 
});

我想说,从地图中删除/添加(切换)图层的最简单方法是使用图层组

在将各个图层添加到地图之前,请将其添加到图层组中,然后将该图层组添加到地图中

然后,当您必须删除图层时,只需调用clearLayers()函数

查看LayerGroup的API

范例

var map = L.map('leafletMap', {minZoom:11}).setView([37.8, -96], 11);
var assetLayerGroup = new L.LayerGroup();
var marker1 = L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.');
var marker2 = L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.'),
assetLayerGroup.addLayer(marker1);
assetLayerGroup.addLayer(marker2);
选中“删除”复选框时

assetLayerGroup.clearLayers();

我编写了下面的示例来说明如何删除多个geoJSON层

///添加geoJSON数据

      var myGeoJSON = L.geoJSON(myData, {

        onEachFeature: function (feature, layer) {
            layer.myTag = "myGeoJSON"
        }

    });
//////函数删除geoJSON层

var removeMarkers = function() {
    map.eachLayer( function(layer) {

      if ( layer.myTag &&  layer.myTag === "myGeoJSON") {
        map.removeLayer(layer)
          }

        });

}
////调用函数


移除标记()

非常感谢你的建议。这似乎适合我的情况。我很快就会尝试。这可能会有所帮助:谢谢你提供了清晰明了的例子。很难找到其中一个!
var removeMarkers = function() {
    map.eachLayer( function(layer) {

      if ( layer.myTag &&  layer.myTag === "myGeoJSON") {
        map.removeLayer(layer)
          }

        });

}