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.
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
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.
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.
![]() |
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:
- Mapserver Run Time Substitution - http://goo.gl/BvmBe
- Mapserver Filter - http://goo.gl/XRV4F
- Tutorial do Blog Linfiniti Geo - http://goo.gl/Ik2T1