Opuscolo: come si usa removeLayer?


14

Questo mi sta facendo impazzire. Vedi il tutorial di Leaflet per aggiungere un controllo layer alla tua mappa:

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

Ora, come posso usare la funzione removeLayer per rimuovere la mappa "GrayScale" dal controllo usando un evento map.on ('click')? Il codice sarebbe:

map.on('click', function(){
    //remove GrayScale
});

Vuoi che l'utente sia in grado di rimuovere la scala di grigi con un pulsante? O per essere rimosso dinamicamente come effetto di qualche altro evento? O vuoi semplicemente che la mappa inizi senza il livello di gradazione di grigio?
hexamon,

Diciamo la soluzione più semplice: dinamicamente come effetto di un evento. Ad esempio, map.on ('click', function () {}). Modificherò il mio post di conseguenza.
Sì,

Risposte:


21

Se si desidera rimuovere la mappa in scala di grigi dall'inizio, è sufficiente eliminare:

    "Grayscale": grayscale,

A partire dal

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

Se vuoi rimuovere il livello con un clic, lo chiami come metodo sull'oggetto mappa. Così:

map.removeLayer(grayscale)

Per rimuoverlo dal controllo devi prima assegnare il controllo a una variabile. Cambia questo:

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

A questa:

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

Quindi puoi chiamare:

lcontrol.removeLayer(grayscale) 

..per rimuoverlo dal controllo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.