Comment changer de couche de base par programme dans MapBox / Leaflet

12

J'ai plusieurs couches de base et j'ai besoin de les changer par programme, en fonction de diverses actions et états dans mon application. Je ne trouve pas comment, pour ma vie.

kgeo
la source

Réponses:

16

Ce tutoriel est un bon exemple:

1) Comme indiqué dans l'exemple, configurez vos couches de base avec un nom de variable accessible dans la fonction où vous souhaitez les basculer par programme.

var grayscale = L.tileLayer(mapboxUrl, {id: 'MapID', attribution: mapboxAttribution}),
    streets   = L.tileLayer(mapboxUrl, {id: 'MapID', attribution: mapboxAttribution});

2) Ensuite, ajoutez et supprimez les calques que vous souhaitez ajouter ou supprimer. Ce qui suit échange le grayscalecalque pour le streetscalque. Cela suppose que les deux grayscaleet streetssont disponibles dans le cadre de la fonction où vous effectuez la commutation.

map.removeLayer(grayscale);
map.addLayer(streets);

3) Si vous utilisez le contrôle des couches L.control.layersillustré dans l'exemple, le contrôle garde la trace de ce qui se trouve sur la carte et modifie les cases à cocher en conséquence.

toms
la source
Où est mapboxUrl& mapboxAttribution?
Mohammad Dayyan
@MohammadDayyan vous devez vous référer au tutoriel qui est lié ci
toms
0

Depuis /programming//a/33762133/4355695

Normalement, en ajoutant simplement une couche à la carte (par exemple, myTileLayer.addTo (map)), si cette couche fait partie des couches de base ou des superpositions du contrôle des couches, cette dernière mettra automatiquement à jour son état (si vous avez ajouté une couche de base, les boutons radio seront sélectionnés en conséquence; pour une superposition, la case correspondante sera cochée).

J'ai essayé et cela a fonctionné: je n'ai pas besoin de me soucier de supprimer la couche de base actuelle (ou de déterminer laquelle est active, d'ailleurs). myTileLayer.addTo(map)Fait juste le travail: s'il fait déjà partie de mes couches de base, alors la carte "bascule" dessus. Il supprime automatiquement le calque actuel et devient myTileLayer.

Nikhil VJ
la source