Folleto: ¿Cómo se usa removeLayer?

13

Esto me está volviendo loco. Consulte el tutorial de folleto para agregar un control de capa a su mapa:

L.Icon.Default.imagePath = "Scripts/images";

var mapUrl = 'http://{s}.tile.openstreetmap.se/hydda/full/{z}/{x}/{y}.png';
var secondMap = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';

var littleton = L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.'),
denver = L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.'),
aurora = L.marker([39.73, -104.8]).bindPopup('This is Aurora, CO.'),
golden = L.marker([39.77, -105.23]).bindPopup('This is Golden, CO.');

var cities = L.layerGroup([littleton, denver, aurora, golden]);

var grayscale = L.tileLayer(mapUrl, { id: mapUrl }),
streets = L.tileLayer(secondMap, { id: secondMap });

var map = L.map('map', {
    center: [39.73, -104.99],
    zoom: 10,
    layers: [grayscale, cities]
});

var baseMaps = {
    "Grayscale": grayscale,
    "Streets": streets
};

var overlayMaps = {
    "Cities": cities
};

L.control.layers(baseMaps, overlayMaps).addTo(map);

Ahora, ¿cómo uso la función removeLayer para eliminar el mapa "GrayScale" del control usando un evento map.on ('click')? El código sería:

map.on('click', function(){
    //remove GrayScale
});
Si hombre
fuente
¿Desea que el usuario pueda eliminar la escala de grises con un botón? ¿O para que se elimine dinámicamente como efecto de algún otro evento? ¿O simplemente desea que el mapa comience sin la capa de escala de grises?
hexamon
Digamos la solución más fácil: dinámicamente como efecto de un evento. Por ejemplo, map.on ('click', function () {}). Editaré mi publicación en consecuencia.
yesman

Respuestas:

20

Si desea eliminar el mapa en escala de grises desde el principio, simplemente elimine:

    "Grayscale": grayscale,

Desde

var baseMaps = {
    "Grayscale": grayscale,
    "Streets": streets
};

Si desea eliminar la capa con un clic, la llamará como método en el objeto del mapa. Al igual que:

map.removeLayer(grayscale)

Para eliminarlo del control, primero debe asignar el control a una variable. Cambia esto:

L.control.layers(baseMaps, overlayMaps).addTo(map);

A esto:

lcontrol = L.control.layers(baseMaps, overlayMaps).addTo(map);

Entonces puedes llamar:

lcontrol.removeLayer(grayscale) 

..para eliminarlo del control.

hexamon
fuente