Wie erhalte ich Leaflet-Interaktivität von Geoserver WMS?

12

Ich habe einen Geoserver, der Shapefiles als WMS in Leaflet anbietet.

Ich möchte Interaktivität hinzufügen, die ein Popup mit WMS-Attributen in der Leaflet-Map anzeigt, wenn der Benutzer mit der Maus über ein WMS-Feature fährt oder darauf klickt.

Ich habe die Wachs / Flugblatt-Interaktivität gesehen, aber ist das mit WMS und Flugblatt möglich?

Zarbo
quelle

Antworten:

14

Sie sollten versuchen, WMS GetFeatureInfo zu verwenden. Hier ist ein Beispiel mit einer Broschüre , die Bryan McBride zur Verfügung gestellt hat. Das zum Auslösen der GetFeatureInfo-Anforderung verwendete Ereignis lautet onclick.

Pedro Mendes
quelle
Jetzt arbeite ich daran, die GetFeatureInfo-Daten mit Geoserver Freemarker-Vorlagen zu formatieren. Irgendwelche Gedanken zu einer Interaktion zwischen Flugblatt und Mauszeiger?
Zarbo
Wie im Beispiel gezeigt, sollten Sie versuchen, das an die onMapClick-Funktion übergebene Ereignis zu ändern: Zeile 41 »map.addEventListener ('click', onMapClick); Ich denke, Sie sollten einen Blick auf die Dokumentationsseite werfen : leaflet.cloudmade.com/reference.html . In Bezug auf die Geoserver-Freemarker-Vorlagen habe ich sie nie verwendet, aber es ist für mich sinnvoller, eine WFS-GetFeature-Anforderung zu erstellen, in der die Antwort in GeoJson anstelle der WMS-GetFeatureInfo formatiert werden soll. Mit diesem GeoJson-Objekt auf der Clientseite ist es viel einfacher, ein einfaches HTML-Markup zum Anzeigen der Feature-Daten zu erstellen.
Pedro Mendes
Es gibt leider keine Möglichkeit, mit Leaflet ein GetFeature zu erstellen.: / Auch wenn Sie den GeoJSON-Layer für denselben Effekt verwenden könnten (auf die Attribute des Features kann bereits auf dem Client zugegriffen werden). Aber genau das liebe ich bei OpenLayers =).
Pedro Mendes
Hallo Zabro, hast du es geschafft, das zum Laufen zu bringen? Ich möchte das Gleiche implementieren. Würde es Ihnen etwas ausmachen, einige Code-Schnipsel zu teilen?
Pragnesh Patel
4
@PedroMendes Der Link zum Beispiel ist leider defekt. Könnten Sie es bitte aktualisieren?
Uströtz
4

Ich erhalte die Interaktivität von Leaflets auf zwei Arten, je nachdem, wie groß der Datensatz ist. Ich würde gegen WMS getFeatureInfo empfehlen, da das Styling komplett serverseitig eingestellt ist, was mühsam zu konfigurieren ist. Also, hier sind meine zwei Möglichkeiten:

  1. Wenn der Datensatz klein ist, laden Sie einfach das Ganze als Vektor (führen Sie die Anforderung als JSONP oder JSON durch, wenn Sie CORS aktiviert haben). Beispiel: https://maps.gcc.tas.gov.au/dogexerciseareas.html und Code: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Wenn das Dataset groß ist, führen Sie eine onClick-Anforderung durch und geben Sie Vektoren für Near-Features zurück (mithilfe von JSON oder JSONP). Beispiel: https://maps.gcc.tas.gov.au/stormwater.html und Code: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Dieses Regenwasserbeispiel ist etwas komplexer als es wirklich sein muss, weil ich ändere, ob eine Ebene interaktiv ist, wenn die Ebenen ein- und ausgeschaltet werden ...)

Alex Leith
quelle
Beachten Sie, dass WMS GetFeatureInfo jetzt JSON zurückgeben kann.
Alex Leith