จะรับการติดต่อสื่อสารของ Leaflet จาก Geoserver WMS ได้อย่างไร?


12

ฉันมี geoserver ที่ให้บริการรูปร่างเป็น WMS ในแผ่นพับ

ฉันต้องการเพิ่มการทำงานร่วมกันที่แสดงป๊อปอัพที่มีคุณสมบัติ WMS ในแผนที่ Leaflet เมื่อผู้ใช้เลื่อนหรือคลิกที่คุณสมบัติ WMS

ฉันเคยเห็นการโต้ตอบของขี้ผึ้ง / ใบปลิว แต่เป็นไปได้ด้วย WMS และแผ่นพับ?

คำตอบ:


14

คุณควรลองใช้ WMS GetFeatureInfo นี่คือตัวอย่างของ Leaflet ที่ทำให้ Bryan McBride พร้อมใช้งาน เหตุการณ์ที่ใช้สำหรับเรียกการร้องขอ GetFeatureInfo คือ onclick


ตอนนี้ฉันกำลังจัดรูปแบบข้อมูล GetFeatureInfo ด้วยเทมเพลต Geoserver Freemarker มีความคิดเห็นเกี่ยวกับการทำงานของ Leaflet hover / mouseover หรือไม่?
zarbo

ดังที่แสดงในตัวอย่างคุณควรลองเปลี่ยนเหตุการณ์ที่ส่งผ่านไปยังฟังก์ชัน onMapClick: บรรทัดที่ 41 » map.addEventListener ('คลิก', onMapClick); ฉันคิดว่าคุณควรจะดูที่หน้าเอกสารนี้: leaflet.cloudmade.com/reference.html เกี่ยวกับเทมเพลต freemarker ของ Geoserver ฉันไม่เคยใช้มันมาก่อน แต่มันสมเหตุสมผลกว่าสำหรับฉันที่จะทำการร้องขอ WFS GetFeature เพื่อขอการตอบสนองที่จะจัดรูปแบบใน GeoJson แทนที่จะเป็น WMS GetFeatureInfo ด้วยวัตถุ GeoJson ในฝั่งไคลเอ็นต์ทำให้ง่ายต่อการสร้างมาร์กอัพ HTML อย่างง่ายเพื่อแสดงข้อมูลคุณลักษณะ
Pedro Mendes

ขออภัย .. ไม่มีวิธีการสร้าง GetFeature ด้วย Leaflet .. : / แม้ว่าคุณจะสามารถใช้เลเยอร์ GeoJSON สำหรับเอฟเฟกต์เดียวกันได้ แต่นั่นคือฉันรัก OpenLayers =)
Pedro Mendes

สวัสดี Zabro คุณจัดการให้ทำงานได้ไหม? ฉันต้องการที่จะใช้เดียวกัน คุณจะแบ่งปันรหัสตัวอย่างบางส่วนได้ไหม
Pragnesh Patel

4
@PedroMendes ลิงก์ไปยังตัวอย่างเสียหายอย่างน่าเสียดาย คุณช่วยอัพเดทได้ไหม
ustroetz

4

ฉันได้รับการโต้ตอบของ Leaflet ในสองวิธีขึ้นอยู่กับว่าชุดข้อมูลมีขนาดใหญ่เพียงใด ฉันอยากจะแนะนำกับ WMS getFeatureInfo เนื่องจากการใส่สไตล์นั้นตั้งค่าฝั่งเซิร์ฟเวอร์ซึ่งน่าเบื่อในการกำหนดค่า ดังนั้นนี่คือสองวิธีของฉัน:

  1. หากชุดข้อมูลมีขนาดเล็กเพียงโหลดสิ่งทั้งหมดเป็นเวกเตอร์ (ทำคำขอเป็น JSONP หรือ JSON หากคุณเปิดใช้งาน CORS) ตัวอย่างเช่น: https://maps.gcc.tas.gov.au/dogexerciseareas.htmlและรหัส: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. หากชุดข้อมูลมีขนาดใหญ่ให้ทำตามคำขอ onClick และส่งคืนพาหะสำหรับคุณสมบัติใกล้ (โดยใช้ JSON หรือ JSONP) ตัวอย่าง: https://maps.gcc.tas.gov.au/stormwater.htmlและรหัส: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(ตัวอย่างของพายุน้ำฝนนั้นซับซ้อนกว่าเล็กน้อยเพราะมันต้องเป็นเพราะฉันเปลี่ยนว่าเลเยอร์เป็นแบบโต้ตอบหรือไม่เมื่อเลเยอร์เปิดและปิด ... )


โปรดทราบว่า WMS GetFeatureInfo สามารถส่งคืน JSON ได้ในขณะนี้
Alex Leith

2

นี่คือปลั๊กอินขนาดเล็กที่ใช้งานได้ดี: https://gist.github.com/rclark/6908938

หากคุณกำลังใช้เวอร์ชันแผ่นพับที่มากกว่า 0.7.3 นี่เป็นอีกหนึ่งปลั๊กอินที่ดีในการระบุตัวตนการคลิกภายในเลเยอร์ WMS: https://github.com/heigeo/leaflet.wms

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