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:
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:
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
Nenhum comentário:
Postar um comentário