How to remove all layers and features from map?

jquery, leaflet, mapbox

Solution

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

Problem

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. Some of the code is: ``` $.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()); }); }); }); } }); }); ``` Is there a way to fetch all layers on the map at a certain point in time and remove them.

Original source