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
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.
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
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);
}
});