How to remove all layers and features from map?

后端 未结 3 1918
陌清茗
陌清茗 2020-12-11 02:25

I am working on a map and I would like to remove all features from the map on a certain event. The features are in multiple layers which are plotted dynamically.

Som

相关标签:
3条回答
  • 2020-12-11 02:56

    In the mabox-gl draw library, There is a function to do this.

    draw.deleteAll().getAll();
    

    This deletes all the features and layers on the map.

    0 讨论(0)
  • 2020-12-11 02:57

    Loop over all the layers added to the map using the eachLayer method of L.Map, then call the removeLayer method of L.Map on each of them:

    map.eachLayer(function (layer) {
        map.removeLayer(layer);
    });
    

    References:

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

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

    Please note that this wil remove ALL the layers from your map. That means also any tilelayers etc. I think in your case it would be best if you do not add all your featureLayers to the map instance, but create a group for them:

    // 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());
                        });
                    });
                });
            }
        });
    });
    

    Now you can call the clearLayers method of L.LayerGroup which will clear of the current layers in the group:

    layerGroup.clearLayers();
    

    Reference:

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

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

    0 讨论(0)
  • 2020-12-11 03:04

    You can use the following truthy check to see if it's a valid geoJSON object:

    map.eachLayer(function(layer) {
      if (!!layer.toGeoJSON) {
        map.removeLayer(layer);
      }
    });
    
    0 讨论(0)
提交回复
热议问题