Jak uzyskać interaktywność Ulotki z Geoserver WMS?

12

Mam geoserver obsługujący pliki kształtów jako WMS w Ulotce.

Chciałbym dodać interaktywność, która pokazuje wyskakujące okienko z atrybutami WMS na mapie Ulotki, gdy użytkownik umieści wskaźnik myszy lub kliknie funkcję WMS.

Widziałem interaktywność wosku / ulotki, ale czy jest to możliwe w przypadku WMS i Ulotki?

zarbo
źródło

Odpowiedzi:

14

Powinieneś spróbować użyć WMS GetFeatureInfo. Oto przykład z udostępnioną Ulotką Bryan McBride. Zdarzenie użyte do uruchomienia żądania GetFeatureInfo to kliknięcie.

Pedro Mendes
źródło
Teraz pracuję nad formatowaniem danych GetFeatureInfo za pomocą szablonów Geoserver Freemarker. Czy są jakieś przemyślenia na temat interakcji najechania myszą / ulotką?
zarbo
Jak pokazano w tym przykładzie, powinieneś spróbować zmienić zdarzenie przekazane do funkcji onMapClick: linia 41 »map.addEventListener ('click', onMapClick); Myślę, że powinieneś zajrzeć na stronę dokumentacji: leaflet.cloudmade.com/reference.html . Jeśli chodzi o szablony Freemarker Geoserver, nigdy go nie użyłem, ale bardziej sensowne jest dla mnie żądanie WF GetFeature z prośbą o sformatowanie odpowiedzi w GeoJson zamiast WMS GetFeatureInfo. Dzięki temu obiektowi GeoJson po stronie klienta znacznie łatwiej jest zbudować prosty znacznik HTML do wyświetlania danych funkcji.
Pedro Mendes
Przepraszamy .. Nie ma możliwości utworzenia GetFeature za pomocą Ulotki ..: / Mimo że można użyć warstwy GeoJSON dla tego samego efektu (atrybuty funkcji są już dostępne na kliencie). Ale to uwielbiam OpenLayers =).
Pedro Mendes
Cześć Zabro, Udało ci się to uruchomić? chcę wdrożyć to samo. czy mógłbyś udostępnić jakieś fragmenty kodu?
Pragnesh Patel
4
@PedroMendes Link do przykładu jest niestety zepsuty. Czy możesz to zaktualizować?
ustroetz
4

Interaktywność Ulotki uzyskuję na dwa sposoby, w zależności od wielkości zbioru danych. Poleciłbym przeciwko WMS getFeatureInfo, ponieważ styl jest ustawiony po stronie serwera, co jest uciążliwe w konfiguracji. Oto moje dwa sposoby:

  1. Jeśli zestaw danych jest mały, po prostu załaduj całość jako wektor (wykonaj żądanie jako JSONP lub JSON, jeśli masz włączone CORS). Na przykład: https://maps.gcc.tas.gov.au/dogexerciseareas.html i kod: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Jeśli zestaw danych jest duży, wykonaj żądanie onClick i zwróć wektory dla funkcji zbliżonych (używając JSON lub JSONP). Przykład: https://maps.gcc.tas.gov.au/stormwater.html i kod: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Ten przykład wody burzowej jest nieco bardziej złożony, niż powinien być, ponieważ zmieniam, czy warstwa jest interaktywna, gdy warstwy są włączane i wyłączane ...)

Alex Leith
źródło
Zauważ, że WMS GetFeatureInfo może teraz zwrócić JSON.
Alex Leith,