Folheto: Como você usa removeLayer?

13

Isso está me deixando bravo. Veja o tutorial do Leaflet para adicionar um controle de camada ao seu 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);

Agora, como uso a função removeLayer para remover o mapa "GrayScale" do controle usando um evento map.on ('click')? O código seria:

map.on('click', function(){
    //remove GrayScale
});
yesman
fonte
Deseja que o usuário possa remover a escala de cinza com um botão? Ou para que seja removido dinamicamente como efeito de algum outro evento? Ou você simplesmente deseja que o mapa inicie sem a camada de escala de cinza?
Hexamon
Digamos a solução mais fácil: dinamicamente como efeito de um evento. Por exemplo, map.on ('clique', função () {}). Vou editar minha postagem de acordo.
yesman 24/09/14

Respostas:

20

Se você deseja remover o mapa em escala de cinza desde o início, exclua:

    "Grayscale": grayscale,

A partir de

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

Se você deseja remover a camada em um clique, chame-a de método no objeto de mapa. Igual a:

map.removeLayer(grayscale)

Para removê-lo do controle, primeiro você deve atribuir o controle a uma variável. Mude isso:

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

Para isso:

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

Então você pode ligar para:

lcontrol.removeLayer(grayscale) 

..para removê-lo do controle.

hexamon
fonte