如何从地图中删除所有图层和要素?

Roh*_*han 8 jquery leaflet mapbox

我正在制作地图,我想在某个事件中删除地图上的所有功能.这些要素采用多层动态绘制.

一些代码是:

$.getJSON('distributor-companies', function (data) {
                var layers = [];
                $.each(data, function (i, item) {
                    if (item.geojson != '') {
                        layers[i] = L.mapbox.featureLayer().addTo(map);
                        $.getJSON('/geojson/' + item.geojson, function (data) {
                            layers[i].setGeoJSON(data);
                            // Loop over the added layer
                            layers[i].eachLayer(function (layer) {
                                // Add click event
                                layer.on('click', function (e) {
                                    // Do stuff
                                    map.fitBounds(layers[i].getBounds());
                                });
                            });
                        });
                    }
                });
            });
Run Code Online (Sandbox Code Playgroud)

有没有办法在某个时间点获取地图上的所有图层并将其删除.

iH8*_*iH8 26

循环遍历所有的层添加到地图使用eachLayer的方法L.Map,则调用removeLayer的方法L.Map对它们中的每:

map.eachLayer(function (layer) {
    map.removeLayer(layer);
});
Run Code Online (Sandbox Code Playgroud)

参考文献:

eachLayer:http://leafletjs.com/reference.html#map-eachlayer

removeLayer:http://leafletjs.com/reference.html#map-removelayer

请注意,这将删除地图中的所有图层.这也意味着任何tilelayers等.我认为在你的情况下,最好不要将所有featureLayers添加到地图实例,而是为它们创建一个组:

// Create group for your layers and add it to the map
var layerGroup = L.layerGroup().addTo(map);

$.getJSON('distributor-companies', function (data) {

    $.each(data, function (i, item) {
        if (item.geojson != '') {
            // Add the new featureLayer to the layerGroup
            var featureLayer = L.mapbox.featureLayer().addTo(layerGroup);
            $.getJSON('/geojson/' + item.geojson, function (data) {
                featureLayer.setGeoJSON(data);
                featureLayer.eachLayer(function (layer) {
                    layer.on('click', function (e) {
                        map.fitBounds(featureLayer.getBounds());
                    });
                });
            });
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

现在,您可以调用clearLayers方法L.LayerGroup清除组中的当前图层:

layerGroup.clearLayers();
Run Code Online (Sandbox Code Playgroud)

参考:

L.LayerGroup:http://leafletjs.com/reference.html#layergroup

clearLayers:http://leafletjs.com/reference.html#layergroup-clearlayers


syb*_*ybb 6

您可以使用以下真实检查来查看它是否是有效的 geoJSON 对象:

map.eachLayer(function(layer) {
  if (!!layer.toGeoJSON) {
    map.removeLayer(layer);
  }
});
Run Code Online (Sandbox Code Playgroud)