Dépliant: Comment utilisez-vous removeLayer?

14

Ça me rend fou. Voir le tutoriel Leaflet pour ajouter un contrôle de couche à votre carte:

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

Maintenant, comment utiliser la fonction removeLayer pour supprimer la carte "GrayScale" du contrôle à l'aide d'un événement map.on ('click')? Le code serait:

map.on('click', function(){
    //remove GrayScale
});
Oui mec
la source
Voulez-vous que l'utilisateur puisse supprimer l'échelle de gris avec un bouton? Ou pour qu'il soit supprimé dynamiquement comme effet d'un autre événement? Ou voulez-vous simplement que la carte démarre sans la couche de niveaux de gris?
hexamon
Disons la solution la plus simple: dynamiquement en tant qu'effet d'un événement. Par exemple, map.on ('cliquez', fonction () {}). Je modifierai mon message en conséquence.
yesman

Réponses:

21

Si vous souhaitez supprimer la carte en niveaux de gris depuis le début, supprimez simplement:

    "Grayscale": grayscale,

De

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

Si vous souhaitez supprimer la couche en un clic, vous l'appelez comme méthode sur l'objet carte. Ainsi:

map.removeLayer(grayscale)

Pour le supprimer du contrôle, vous devez d'abord affecter le contrôle à une variable. Change ça:

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

Pour ça:

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

Ensuite, vous pouvez appeler:

lcontrol.removeLayer(grayscale) 

..pour le supprimer du contrôle.

hexamon
la source