quinta-feira, janeiro 24, 2013

Run Time Substitution no Mapserver

(Obs.: Atualizado para a versão 6.4 do Mapserver)

1- INTRODUÇÃO


Desde a versão 4.0, o Mapserver apresenta uma funcionalidade chamada “Run Time Substitution”, que é muito interessante para destacar determinadas feições do mapa que está sendo exibido no navegador.

O seu funcionamento é bastante simples e não requer conhecimentos sobre programação MapScript, sendo necessário apenas fazer alguns ajustes no arquivo mapfile e inserir os parâmetros na url que indicarão qual ou quais feições devem ser destacadas.

Para demonstrar a utilização desse recurso, imagine o seguinte cenário: um aplicativo WebGIS exibe o mapa estadual e após a realização de uma consulta, deve-se mostrar o município que foi selecionado com uma cor diferente das demais feições da camada. Este é um exemplo simples de como podemos utilizar o  Run Time Substitution.

Neste tutorial, será demonstrado como montar um mapfile com este recurso, utilizando dados do estado do Ceará. O ambiente de desenvolvimento utilizado será o Ubuntu 12.04. No entanto, nada impede que o desenvolvedor realize este tutorial em outro sistema operacional, desde que sejam realizadas as devidas modificações dos paths das pastas e da url.

2- DOWNLOADS DOS DADOS E CRIAÇÃO DAS PASTAS:


Faça o download dos dados neste link.

Em seguida cria-se uma pasta com o nome ce na pasta raiz do seu servidor Web, no meu caso ela fica em /var/www/html. Descompacte a pasta contendo os dados dentro da pasta “ce” criada.

3- CRIAÇÃO DO ARQUIVO MAPFILE:


Utilizando o editor de texto qualquer, crie dentro da pasta ce o arquivo ceara.map, com o seguinte conteúdo:
MAP
NAME 'ceara'
EXTENT 168894 9143291 801185 9695478
SIZE 650 600
UNITS meters
SHAPEPATH 'shp'
PROJECTION
'init=epsg:29185'
END
IMAGECOLOR 255 255 255
IMAGEQUALITY 95
IMAGETYPE agg
OUTPUTFORMAT
NAME agg
DRIVER AGG/PNG
IMAGEMODE RGB
END
LAYER
NAME 'oceano'
STATUS DEFAULT
TYPE POLYGON
DATA 'oceano.shp'
CLASS
NAME 'Oceano Atlântico'
STYLE
WIDTH 1.0
OUTLINECOLOR 0 0 255
COLOR 85 170 255
END
END
END
LAYER
NAME 'vizinhos'
STATUS DEFAULT
TYPE POLYGON
DATA 'vizinhos.shp'
CLASS
NAME 'Estados Vizinhos'
STYLE
WIDTH 1.0
OUTLINECOLOR 100 100 100
COLOR 199 199 199
END
END
END
LAYER
NAME 'municipios'
STATUS DEFAULT
TYPE POLYGON
DATA 'municipios.shp'
CLASS
NAME 'Municípios'
STYLE
WIDTH 1
OUTLINECOLOR 0 0 0
COLOR 255 255 0
END
END
END
END
view raw gistfile1.rb hosted with ❤ by GitHub


Para testar o mapfile criado,  abra o browser e digite a seguinte url:


Deverá aparecer uma imagem no navegador semelhante a da Figura 1:

Figura 1 - Teste do mapfile criado

4- PREPARANDO O RUN TIME SUBSTITUTION NO MAPFILE:


Adicione a camada que terá o recurso de substituição em tempo de execução, para isso, altere o mapfile anterior, adicionando antes da última linha (Fim do mapfile) as instruções a seguir:

LAYER
NAME 'municipios_selecao'
STATUS DEFAULT
TYPE POLYGON
DATA 'municipios.shp'
FILTER ([idmun]=%idmun%)
VALIDATION
'idmun' '^[0-9]{1,3}$'
END
CLASS
NAME 'Seleção'
STYLE
WIDTH 2
OUTLINECOLOR 218 0 0
COLOR 240 60 0
END
END
END
view raw gistfile1.rb hosted with ❤ by GitHub

Temos agora alguns novos elementos, primeiro, dentro do objeto VALIDATION aparece uma regra de validação (construída com o uso de expressões regulares), que é necessária para o funcionamento correto deste recurso, pois caso seja passado algum valor na url que não seja numérico e que não possua de um a três dígitos, não será exibido nada de diferente no mapa. O nome da regra deve ser o  mesmo nome do campo, neste caso idmun é uma coluna que contém valores incrementais de 1 a 184. Ou seja, cada município pode ser representado por um código deste campo.

O outro novo elemento é o objeto FILTER, nele deve-se especificar as feições que serão exibidas no mapa, através de uma expressão, no nosso caso, a expressão contém apenas o nome da coluna id_mun entre os caracteres de máscara ‘%’. Mais detalhes sobre como utilizar os filtros podem ser encontrados na documentação do Mapserver.

5- RESULTADO:


Para testar o funcionamento deste recurso, adicionamos mais uma variável na url, contendo o nome da coluna que definimos em FILTER (idmun), da seguinte forma:


Se não houve nenhum erro de digitação, deverá ser exibido o mapa anterior com a feição com o idmun igual a 63 destacado, como mostra a Figura 2.

Figura 2 - Resultado do Run Time Substitution

Variando os valores de 1 a 184 vemos que o recurso funciona perfeitamente, destacando outras feições. Agora é usar a criatividade para desenvolver as aplicações Mapserver explorando este recurso. Uma sugestão é combiná-lo com a variável mapext na url onde são passados as coordenadas do retângulo envolvente da feição selecionada, da seguinte forma: &mapext=xmin+ymin+xmax+ymax.

6- SUGESTÕES DE LEITURA:

Nenhum comentário: