Leaflet: Как вы используете removeLayer?

15

Это сводит меня с ума. См. Учебник Leaflet для добавления элемента управления слоями на карту:

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

Теперь, как мне использовать функцию removeLayer для удаления карты «GrayScale» из элемента управления с помощью события map.on («click»)? Код будет:

map.on('click', function(){
    //remove GrayScale
});
Да, чувак
источник
Вы хотите, чтобы пользователь мог удалить оттенки серого с помощью кнопки? Или для его динамического удаления в результате какого-то другого события? Или вы просто хотите, чтобы карта начиналась без слоя в градациях серого?
гексамон
Допустим, самое простое решение: динамически, как воздействие на событие. Например, map.on ('click', function () {}). Я буду редактировать свой пост соответственно.
Yesman

Ответы:

21

Если вы хотите удалить карту оттенков серого с самого начала, просто удалите:

    "Grayscale": grayscale,

От

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

Если вы хотите удалить слой одним щелчком, вы вызываете его как метод объекта карты. Вот так:

map.removeLayer(grayscale)

Чтобы удалить его из элемента управления, сначала необходимо назначить элемент управления переменной. Изменить это:

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

К этому:

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

Тогда вы можете позвонить:

lcontrol.removeLayer(grayscale) 

... чтобы удалить его из-под контроля.

hexamon
источник