Come ottenere l'interattività dei volantini da Geoserver WMS?


12

Ho un geoserver che serve shapefile come WMS in Leaflet.

Vorrei aggiungere l'interatività che mostra un popup con attributi WMS nella mappa Leaflet quando l'utente passa sopra o fa clic su una funzione WMS.

Ho visto l'interattività cera / volantino, ma è possibile con WMS e Leaflet?

Risposte:


14

Dovresti provare a usare WMS GetFeatureInfo. Ecco un esempio con Leaflet reso disponibile Bryan McBride. L'evento utilizzato per attivare la richiesta GetFeatureInfo è onclick.


Ora sto lavorando alla formattazione dei dati GetFeatureInfo con i modelli Geoserver Freemarker. Qualche idea su un'interazione con il volantino / passaggio del mouse su Leaflet?
Zar

Come mostrato nell'esempio, dovresti provare a cambiare l'evento passato alla funzione onMapClick: linea 41 »map.addEventListener ('click', onMapClick); Penso che dovresti dare un'occhiata alla pagina della documentazione: leaflet.cloudmade.com/reference.html . Per quanto riguarda i modelli di freemarker Geoserver non l'ho mai usato, ma per me ha più senso presentare una richiesta GetFeature WFS che richiede la formattazione della risposta in GeoJson anziché in GetFeatureInfo WMS. Con quell'oggetto GeoJson sul lato client è molto più facile creare un semplice markup HTML per visualizzare i dati delle funzioni.
Pedro Mendes,

Spiacenti. Non è possibile creare una GetFeature con Leaflet ..: / Anche se è possibile utilizzare il layer GeoJSON per lo stesso effetto (gli attributi della funzione sono già accessibili sul client). Ma adoro OpenLayers =).
Pedro Mendes,

Ciao Zabro, sei riuscito a farlo funzionare? voglio implementare lo stesso. ti dispiacerebbe condividere alcuni frammenti di codice?
Pragnesh Patel,

4
@PedroMendes Il collegamento all'esempio è purtroppo interrotto. Potresti aggiornarlo, per favore?
ustroetz,

4

Ottengo l'interattività di Leaflet in due modi, a seconda della dimensione del set di dati. Consiglierei contro WMS getFeatureInfo, perché lo stile è tutto impostato sul lato server, che è noioso da configurare. Quindi, ecco i miei due modi:

  1. Se il set di dati è piccolo, basta caricare l'intera cosa come un vettore (eseguire la richiesta come JSONP o JSON se si dispone di CORS abilitato). Ad esempio: https://maps.gcc.tas.gov.au/dogexerciseareas.html e codice: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Se il set di dati è di grandi dimensioni, eseguire una richiesta onClick e restituire i vettori per funzionalità vicine (utilizzando JSON o JSONP). Esempio: https://maps.gcc.tas.gov.au/stormwater.html e codice: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Quell'esempio di acqua piovana è un po 'più complesso di quanto debba essere perché cambio se un layer è interattivo quando i layer sono attivati ​​e disattivati ​​...)


Si noti che WMS GetFeatureInfo può restituire JSON ora.
Alex Leith,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.