Bagaimana cara mendapatkan interaktivitas Leaflet dari Geoserver WMS?

12

Saya memiliki geoserver yang melayani shapefile sebagai WMS ke Leaflet.

Saya ingin menambahkan interativitas yang menampilkan sembulan dengan atribut WMS di peta Leaflet ketika pengguna mengarahkan atau mengklik pada fitur WMS.

Saya telah melihat interaktivitas lilin / leaflet, tetapi apakah itu mungkin dengan WMS dan Leaflet?

zarbo
sumber

Jawaban:

14

Anda harus mencoba menggunakan WMS GetFeatureInfo. Berikut ini contoh dengan Leaflet yang tersedia, Bryan McBride. Acara yang digunakan untuk memicu permintaan GetFeatureInfo ada di klik.

Pedro Mendes
sumber
Sekarang saya sedang mengerjakan memformat data GetFeatureInfo dengan templat Geoserver Freemarker. Adakah pemikiran tentang interaksi Leaflet hover / mouseover?
zarbo
Seperti yang ditunjukkan dalam contoh Anda harus mencoba mengubah acara yang dilewatkan ke fungsi onMapClick: baris 41 »map.addEventListener ('klik', onMapClick); Saya pikir Anda harus melihat pada halaman dokumentasi: leaflet.cloudmade.com/reference.html . Mengenai templat freemarker Geoserver saya tidak pernah menggunakannya, tetapi lebih masuk akal bagi saya untuk membuat permintaan GetFeature WFS meminta respons untuk diformat dalam GeoJson alih-alih WMS GetFeatureInfo. Dengan objek GeoJson di sisi klien, jauh lebih mudah untuk membangun markup HTML sederhana untuk menampilkan data fitur.
Pedro Mendes
Maaf .. Tidak ada cara untuk membuat GetFeature dengan Leaflet ..: / Meskipun Anda bisa menggunakan layer GeoJSON untuk efek yang sama (atribut fitur sudah dapat diakses pada klien). Tapi itu saya suka OpenLayers =).
Pedro Mendes
Hai Zabro, Apakah Anda berhasil membuatnya berfungsi? saya ingin menerapkan yang sama. maukah Anda berbagi beberapa cuplikan kode?
Pragnesh Patel
4
@PedroMendes Tautan ke contoh ini sayangnya rusak. Bisakah Anda memperbaruinya?
ustroetz
4

Saya mendapatkan interaktivitas Leaflet dalam dua cara, tergantung pada seberapa besar dataset. Saya akan merekomendasikan terhadap getFeatureInfo WMS, karena styling semua diatur sisi server, yang membosankan untuk mengkonfigurasi. Jadi, inilah dua cara saya:

  1. Jika dataset kecil, muat semuanya sebagai vektor (lakukan permintaan sebagai JSONP atau JSON jika Anda mengaktifkan CORS). Misalnya: https://maps.gcc.tas.gov.au/dogexerciseareas.html dan kode: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Jika dataset besar, lakukan permintaan onClick dan kembalikan vektor untuk fitur dekat (menggunakan JSON atau JSONP). Contoh: https://maps.gcc.tas.gov.au/stormwater.html dan kode: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Contoh stormwater itu sedikit lebih kompleks daripada yang sebenarnya perlu karena saya mengubah apakah lapisan interaktif ketika lapisan dihidupkan dan dimatikan ...)

Alex Leith
sumber
Perhatikan bahwa WMS GetFeatureInfo dapat mengembalikan JSON sekarang.
Alex Leith