ฉันมีหลายเลเยอร์ฐานและจำเป็นต้องเปลี่ยนเป็นโปรแกรมขึ้นอยู่กับการกระทำและสถานะต่าง ๆ ในแอปพลิเคชันของฉัน ไม่สามารถหาได้อย่างไรเพื่อชีวิตของฉัน
ฉันมีหลายเลเยอร์ฐานและจำเป็นต้องเปลี่ยนเป็นโปรแกรมขึ้นอยู่กับการกระทำและสถานะต่าง ๆ ในแอปพลิเคชันของฉัน ไม่สามารถหาได้อย่างไรเพื่อชีวิตของฉัน
คำตอบ:
บทช่วยสอนนี้เป็นตัวอย่างที่ดี:
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
แสดงในตัวอย่างตัวควบคุมจะติดตามสิ่งที่อยู่บนแผนที่และเปลี่ยนช่องทำเครื่องหมายตามนั้น
จากhttps://stackoverflow.com/a/33762133/4355695
โดยปกติเพียงเพิ่มเลเยอร์ในแผนที่ (เช่น myTileLayer.addTo (map)) หากเลเยอร์นั้นเป็นส่วนหนึ่งของเลเยอร์ฐานหรือเลเยอร์ของการควบคุมเลเยอร์เลเยอร์หลังจะอัปเดตสถานะโดยอัตโนมัติ (ถ้าคุณเพิ่มเลเยอร์ฐาน ปุ่มตัวเลือกจะถูกเลือกตามลำดับสำหรับภาพซ้อนทับช่องทำเครื่องหมายที่เกี่ยวข้องจะถูกเลือก)
ฉันลองแล้วใช้งานได้: ฉันไม่จำเป็นต้องกังวลกับการลบบาเซิลปัจจุบันออกไป แค่myTileLayer.addTo(map)
ทำงาน: ถ้ามันเป็นส่วนหนึ่งของ baselayers ของฉันแล้วแผนที่ "สลับ" เพื่อมัน myTileLayer
โดยจะเอาเลเยอร์ปัจจุบันและการเปลี่ยนแปลง
mapboxUrl
& คือmapboxAttribution
อะไร