Criando uma aplicação de mapeamento com camadas com MapServer

Publicado: 01/04/2011 em Linux, Programação, Serviços IP
Tags:, ,

Antes de prosseguir neste post, verifique o ambiente criado na instalação do MapServer , a primeira aplicação MapServer e o primeiro exemplo de criação de mapas com MapServer que estão em posts anteriores. Este post é uma continuação dos anteriores.

1. Criar o arquivo mapfile /home/mapdata/second.map

MAP
# This is our second map file
NAME "second"
UNITS dd
SIZE 640 480
IMAGECOLOR 255 255 255
IMAGETYPE gif
SHAPEPATH "/home/mapdata/mapas/"
EXTENT -180.00 0.00 -60.00 90.00
# FONTSET "/var/www/fontset.txt"
WEB
TEMPLATE "/var/www/second.html"
IMAGEPATH "/var/www/tmp/"
IMAGEURL "/tmp/"
END
#
LAYER
NAME "urbanareas"
DATA "urbanap020"
STATUS on
TYPE polygon
LABELCACHE on
LABELITEM 'NAME'
CLASS
NAME "Urban Areas"
STYLE
COLOR 212 192 100
END
LABEL
COLOR 0 0 0
SIZE small
END # label
END # class Urban Areas
END # layer urbanareas
#
LAYER
NAME "lakes"
DATA "hydrogp020"
STATUS on
TYPE polygon
LABELCACHE on
LABELITEM "NAME"
CLASSITEM "FEATURE"
MAXFEATURES 100
CLASS
NAME "Lakes"
EXPRESSION 'Lake'
STYLE
SIZE 1
COLOR 0 0 255
END
LABEL
MINFEATURESIZE auto
COLOR 0 0 0
SIZE small
END # label
END # class Lakes
END # layer lakes
#
LAYER
NAME "states"
DATA "statesp020"
STATUS on
TYPE polygon
LABELCACHE on
CLASS
STYLE
OUTLINECOLOR 0 0 0
END
END # class
END # layer states
#
LAYER
NAME "roads"
DATA "roadtrl020"
STATUS on
TYPE line
LABELCACHE on
LABELITEM "NAME"
CLASSITEM "FEATURE"
CLASS
NAME "Principal Highway"
EXPRESSION /Principal Highway*/
STYLE
SIZE 1
COLOR 0 0 0
END
LABEL
COLOR 0 0 0
SIZE small
END # label
END # class Principal Highway
END # layer roads
END # mapfile

OBS:
a) o exemplo acima é compatível com MapServer versão 5 ou superior, a partir de março de 2009. Mais detalhes vide MS RFC 56: Tighten control of access to mapfiles and templates e Guia de Migração para MapServer 5. Isso foi parte de um conjunto de medidas de segurança para o funcionamento do MapServer.

b) Com privilégios de administrador, fazer:

# chown nobody:nogroup /home/mapdata/second.map
# chmod 444 /home/mapdata/second.map

2. Criar o arquivo de Inicialização /var/www/second_i.html

<html>
<head> <title>MapServer Second Map</title></head>
<body>
<form method=POST action="/cgi-bin/mapserv">
<input type="submit" value="Click to initialize">
<input type="hidden" name="program" value="/cgi-bin/mapserv">
<input type="hidden" name="map" value="/home/mapdata/second.map">
<input type="hidden" name=zoomsize size=2 value=2>
<input type="hidden" name="layers"
value="urbanareas lakes states roads capitals">
</form>
</body>
</html>

OBS: Com privilégios de administrador, fazer:

# chown www-data:www-data /var/www/second_i.html
# chmod 644 /var/www/second_i.html

3. Criar o arquivo de template /var/www/second.html

<!-- MapServer Template -->
<!-- o comentário acima é OBRIGATÓRIO na primeira linha deste template MapServer -->
<html>
<head><title>Second Map</title></head>
<body>
<form name="the_form" method=GET action="[program]">
<table width="100%">
<tr>
<td width="60%">
<input name="img" type="image" src="[img]"
width=640 height=480 border=2></td>
<td width="40%" align="left">
<table border="1" width="300">
<tr><td align="center" colspan="3">
<input type="submit" value="Refresh"></td></tr>
<tr><td align="center" colspan="3">Zoom</td></tr>
<tr><td align="right" width="100">Zoom In
<input type=radio name=zoomdir value=1
[zoomdir_1_check]></td>
<td align="right" width="100">Zoom Out
<input type=radio name=zoomdir value=-1
[zoomdir_-1_check]></td>
<td align="right" width="100">Size
<input type=text name=zoomsize size=2
value=[zoomsize]></td></tr>
<tr><td align="center" colspan="3">Pan
<input type=radio name=zoomdir
value=0 [zoomdir_0_check]></td></tr>
</table>
<hr size="1">
<table>
<tr><td colspan="3">
<input type="checkbox" name="layer" value="urbanareas"
[urbanareas_check]>Urban Areas</td></tr>
<tr><td colspan="3"><input type="checkbox"
name="layer" value="lakes"
[lakes_check]>Lakes</td></tr>
<tr><td colspan="3"><input type="checkbox"
name="layer" value="states"
[states_check]>State Boundaries</td></tr>
<tr><td colspan="3"><input type="checkbox"
name="layer" value="roads"
[roads_check]>Roads</td></tr>
</table>
</td>
</tr>
</table>
<input type="hidden" name="imgxy" value="320 240">
<input type="hidden" name="imgext" value="[mapext]">
<input type="hidden" name="map" value="[map]">
<input type="hidden" name="program" value="[program]">
</form>
</body>
</html>

OBS: Com privilégios de administrador, fazer:

# chown www-data:www-data /var/www/second.html
# chmod 644 /var/www/second.html

4. Carregue a página no navegador digitando a URL http://localhost/second_i.html

Uma imagem como a abaixo irá aparecer.

Agora, clique no botão e uma nova página será gerada como a abaixo.

As imagens renderizadas estarão sendo armazenadas em /var/www/tmp.

Veja também o post Aplicações MapServer com fontes Truetype.

Para entender mais:
1- Instalar o MapServer com PHP/MapScript no Debian
2- Executando a primeira aplicação MapServer no Debian
3- Visualizando um primeiro mapa com MapServer
4- Documentação MapServer
5- Exemplo de MapServer Template
6- Variáveis CGI MapServer
7- HTML Templates e Query
8- Livro: Beginning MapServer: open source GIS development

Anúncios
comentários
  1. Mose disse:

    Tem como colocar um jeito de compartilhar por email?
    VAleu!8)

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s