Javascript 传单.js:如何从地图中删除多个图层
我正在使用传单.js制作地图。现在我想从地图上删除添加的图层。通过单击输入按钮,所有选中的复选框应更改为未选中,所有相应的图层应从地图中删除 要从地图中删除图层,需要图层的id。此id等于相应复选框的id。这就是为什么我使用jQuery获取所有选中复选框的ID,并将其值存储在一个对象中,这里称为someObj.idsCheckedJavascript 传单.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
当我尝试使用存储值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)
}
});
}