Como obter a interatividade do Leaflet no Geoserver WMS?

12

Eu tenho o geoserver servindo shapefiles como WMS no Leaflet.

Gostaria de adicionar interatividade que mostra um pop-up com atributos WMS no mapa do Leaflet quando o usuário passa o mouse ou clica em um recurso WMS.

Eu já vi a interatividade cera / folheto, mas isso é possível com o WMS e o Leaflet?

zarbo
fonte

Respostas:

14

Você deve tentar usar o WMS GetFeatureInfo. Aqui está um exemplo com o folheto disponibilizado Bryan McBride. O evento usado para acionar a solicitação GetFeatureInfo é onclick.

Pedro Mendes
fonte
Agora estou trabalhando na formatação dos dados GetFeatureInfo com modelos do Geoserver Freemarker. O que você achou de uma interação do mouse sobre o mouse?
Zarbo 14/09
Como mostrado no exemplo, você deve tentar alterar o evento passado para a função onMapClick: linha 41 »map.addEventListener ('click', onMapClick); Acho que você deve dar uma olhada na página de documentação: leaflet.cloudmade.com/reference.html . Em relação aos modelos de marcadores geoserver, nunca o usei, mas faz mais sentido fazer uma solicitação WFS GetFeature solicitando que a resposta seja formatada no GeoJson, em vez do WMS GetFeatureInfo. Com esse objeto GeoJson no lado do cliente, é muito mais fácil criar uma marcação HTML simples para exibir os dados dos recursos.
Pedro Mendes
Desculpe .. Não há como criar um GetFeature com Leaflet ..: / Embora você possa usar a camada GeoJSON para o mesmo efeito (os atributos do recurso já estão acessíveis no cliente). Mas é isso que eu amo OpenLayers =).
Pedro Mendes
Oi Zabro, Você conseguiu fazer isso funcionar? Eu quero implementar o mesmo. você se importaria de compartilhar alguns trechos de código?
Pragnesh Patel
4
@PedroMendes Infelizmente, o link para o exemplo está quebrado. Você poderia atualizá-lo?
ustroetz
4

Eu recebo a interatividade do Leaflet de duas maneiras, dependendo do tamanho do conjunto de dados. Eu recomendaria contra o WMS getFeatureInfo, porque o estilo é todo definido no lado do servidor, o que é tedioso de configurar. Então, aqui estão minhas duas maneiras:

  1. Se o conjunto de dados for pequeno, basta carregar a coisa toda como um vetor (faça a solicitação como JSONP ou JSON se o CORS estiver ativado). Por exemplo: https://maps.gcc.tas.gov.au/dogexerciseareas.html e código: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Se o conjunto de dados for grande, faça uma solicitação onClick e retorne vetores para recursos próximos (usando JSON ou JSONP). Exemplo: https://maps.gcc.tas.gov.au/stormwater.html e código: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Esse exemplo de águas pluviais é um pouco mais complexo do que realmente precisa ser porque eu mudo se uma camada é interativa quando as camadas são ativadas e desativadas ...)

Alex Leith
fonte
Observe que o WMS GetFeatureInfo pode retornar o JSON agora.
Alex Leith