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.
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);
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With