Leaflet: Bagaimana Anda menggunakan removeLayer?

13

Ini membuatku gila. Lihat tutorial Leaflet untuk menambahkan kontrol layer ke peta Anda:

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

Sekarang, bagaimana cara menggunakan fungsi removeLayer untuk menghapus peta "GrayScale" dari kontrol menggunakan map.on ('klik') acara? Kode tersebut adalah:

map.on('click', function(){
    //remove GrayScale
});
yesman
sumber
Apakah Anda ingin pengguna dapat menghapus Grayscale dengan sebuah tombol? Atau agar dihapus secara dinamis sebagai efek dari beberapa peristiwa lain? Atau apakah Anda hanya ingin peta dimulai tanpa lapisan abu-abu sama sekali?
hexamon
Katakanlah solusi termudah: secara dinamis sebagai efek terhadap suatu peristiwa. Misalnya, map.on ('klik', fungsi () {}). Saya akan mengedit posting saya sesuai.
yesman

Jawaban:

20

Jika Anda ingin menghapus peta abu-abu dari awal, cukup hapus:

    "Grayscale": grayscale,

Dari

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

Jika Anda ingin menghapus layer pada klik Anda menyebutnya sebagai metode pada objek peta. Seperti itu:

map.removeLayer(grayscale)

Untuk menghapusnya dari kontrol, Anda pertama-tama harus menetapkan kontrol ke variabel. Ubah ini:

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

Untuk ini:

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

Maka Anda dapat menelepon:

lcontrol.removeLayer(grayscale) 

..untuk menghapusnya dari kontrol.

hexamon
sumber