domingo, agosto 17, 2014

WMS GetFeatureInfo Utilizando MapServer e Leaflet

No Leaflet existem duas formas bem usuais de se obter os dados tabulares de uma feição através do clique do usuário em uma determinada camada. Uma delas é através do uso de marcadores (Markers), que é mais utilizada para a representação de pontos. A outra  é  o formato GeoJSON, que é uma excelente opção para exibir camadas de polígonos e de linhas neste aplicativo.

Porém, quando uma camada GeoJSON possui muitas feições ou uma grande quantidade de vértices, seu carregamento pode comprometer o desempenho do aplicativo. Uma saída para este problema é utilizar o formato WMS habilitando a requisição GetFeatureInfo como é mostrado no exemplo a seguir.

1 - Configuração do Mapfile como Servidor WMS:


A configuração do servidor WMS é feita através da definição dos itens obrigatórios para o seu funcionamento, a nível de MAP e de LAYER, definidos na documentação do MapServer no item "Setting Up a WMS Server Using MapServer". 



2 - Configuração do Template HTML para a requisição GetFeatureInfo:


Neste arquivo são definidos os dados que serão exibidos na janela de atributos através do GetFeatureInfo WMS Request. 


3 - Configuração do Leaflet:


Para habilitar esta funcionalidade  é necessário configurar a camada WMS no Leaflet, como é exibido a seguir:

Já com a função IDENTIFY abaixo, é possível associar ao clique do mouse uma requisição GetFeatureInfo, através da obtenção das variáveis BBOX, WIDTH, HEIGHT, X e Y. Com elas é definida a variável URL que fará esta requisição ao servidor WMS e trará o resultado de forma assíncrona com método $.ajax do jQuery.

A página HTML contendo o Leaflet fica então desta forma:


4 - Resultado:


Ao clicar em um município, é exibido uma janela contendo os atributos, como mostra a figura abaixo:


Você pode baixar os códigos deste exemplo neste link.

Sugestões de Leitura:


3 comentários:

Rafael Dantas disse...

olá professor,

baixei os arquivos mas não consegui fazer a camada wms aparecer. tentei fazer com shp e não com postgres.
o console do firefox diz o seguinte erro:

GET http://localhost/cgi-bin/mapserv [HTTP/1.1 404 Not Found 0 ms]

URL do pedido: http://localhost/cgi-bin/mapserv?map=/var/www/html/mapserver_wms/municipios.map&&SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=municipios&STYLES=&FORMAT=image%2Fpng&TRANSPARENT=true&HEIGHT=256&WIDTH=256&SRS=EPSG%3A3857&POINTERCURSOR=true&BBOX=-10018754.171394622,-5009377.085697309,-7514065.628545966,-2504688.542848655
Método do pedido: GET
Código do status: HTTP/1.1 404 Not Found

Marcello Benigno disse...

Olá Rafael,

Observe que eu estou utilizando o Linux. Se você estiver utilizando Windows, altere o nome do CGI do mapserver para "mapserv.exe", tanto no mapfile quanto no arquivo HTML, no código javascript. Também verifique os caminhos dos diretórios, feito isso, deve funcionar normalmente.

Valengo's disse...

Obrigada! Me ajudou aqui :)