Jak programowo przełączać warstwę bazową w MapBox / Leaflet

12

Mam wiele warstw podstawowych i muszę je przełączać programowo, w zależności od różnych działań i stanów w mojej aplikacji. Nie mogę znaleźć jak dla mojego życia.

kgeo
źródło

Odpowiedzi:

16

Ten samouczek stanowi dobry przykład:

1) Jak pokazano w przykładzie, skonfiguruj warstwy podstawowe o nazwie zmiennej, do której można uzyskać dostęp w funkcji, w której chcesz je przełączać programowo.

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

2) Następnie dodaj i usuń warstwy, które chcesz dodać lub usunąć. Poniżej wymieniono grayscalewarstwę na streetswarstwę. Zakłada się, że zarówno grayscalei streetssą dostępne w ramach funkcji gdzie robisz przełączanie.

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

3) Jeśli używasz kontrolki warstw L.control.layerspokazanej w przykładzie, wówczas kontrolka śledzi zawartość mapy i odpowiednio zmienia pola wyboru.

tomy
źródło
GDZIE jest mapboxUrl& mapboxAttribution?
Mohammad Dayyan
@MohammadDayyan musisz zapoznać się z samouczkiem, do którego prowadzi link powyżej
tom
0

Od https://stackoverflow.com/a/33762133/4355695

Zwykle po prostu dodając warstwę do mapy (np. MyTileLayer.addTo (mapa)), jeśli ta warstwa jest częścią warstw podstawowych lub nakładek Kontrolki warstw, ta ostatnia automatycznie zaktualizuje swój status (jeśli dodałeś warstwę podstawową, przyciski opcji zostaną odpowiednio wybrane; w przypadku nakładki odpowiednie pole wyboru zostanie zaznaczone).

Próbowałem i zadziałało: nie muszę zawracać sobie głowy usunięciem bieżącej warstwy podstawowej (lub ustaleniem, który z nich jest aktywny). Po prostu myTileLayer.addTo(map)wykonuje to zadanie: jeśli jest już częścią moich podstawek, mapa „przełącza się” na to. Automatycznie usuwa bieżącą warstwę i zmienia się na myTileLayer.

Nikhil VJ
źródło