วิธีการสลับเลเยอร์พื้นฐานโดยทางโปรแกรมใน MapBox / Leaflet


12

ฉันมีหลายเลเยอร์ฐานและจำเป็นต้องเปลี่ยนเป็นโปรแกรมขึ้นอยู่กับการกระทำและสถานะต่าง ๆ ในแอปพลิเคชันของฉัน ไม่สามารถหาได้อย่างไรเพื่อชีวิตของฉัน

คำตอบ:


16

บทช่วยสอนนี้เป็นตัวอย่างที่ดี:

1) ดังที่แสดงในตัวอย่างตั้งค่าเลเยอร์ฐานของคุณด้วยชื่อตัวแปรที่สามารถเข้าถึงได้ในฟังก์ชั่นที่คุณต้องการสลับมันโดยทางโปรแกรม

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

2) จากนั้นเพิ่มและลบเลเยอร์ที่คุณต้องการเพิ่มหรือลบ ต่อไปนี้สลับgrayscaleเลเยอร์สำหรับstreetsเลเยอร์ สิ่งนี้จะถือว่าทั้งสองgrayscaleและstreetsพร้อมใช้งานภายในขอบเขตของฟังก์ชันที่คุณกำลังทำการสลับ

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

3) หากคุณใช้การควบคุมเลเยอร์ที่L.control.layersแสดงในตัวอย่างตัวควบคุมจะติดตามสิ่งที่อยู่บนแผนที่และเปลี่ยนช่องทำเครื่องหมายตามนั้น


mapboxUrl& คือmapboxAttributionอะไร
โมฮัมหมัด Dayyan

@ MohammadDayyan คุณต้องอ้างถึงบทช่วยสอนที่เชื่อมโยงไว้ด้านบน
toms

0

จากhttps://stackoverflow.com/a/33762133/4355695

โดยปกติเพียงเพิ่มเลเยอร์ในแผนที่ (เช่น myTileLayer.addTo (map)) หากเลเยอร์นั้นเป็นส่วนหนึ่งของเลเยอร์ฐานหรือเลเยอร์ของการควบคุมเลเยอร์เลเยอร์หลังจะอัปเดตสถานะโดยอัตโนมัติ (ถ้าคุณเพิ่มเลเยอร์ฐาน ปุ่มตัวเลือกจะถูกเลือกตามลำดับสำหรับภาพซ้อนทับช่องทำเครื่องหมายที่เกี่ยวข้องจะถูกเลือก)

ฉันลองแล้วใช้งานได้: ฉันไม่จำเป็นต้องกังวลกับการลบบาเซิลปัจจุบันออกไป แค่myTileLayer.addTo(map)ทำงาน: ถ้ามันเป็นส่วนหนึ่งของ baselayers ของฉันแล้วแผนที่ "สลับ" เพื่อมัน myTileLayerโดยจะเอาเลเยอร์ปัจจุบันและการเปลี่ยนแปลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.