mapserver Page History
Introdução
MapServer é um popular projeto Open Source cujo propósito é apresentar mapas dinâmicos na internet.
Em sua forma básica, o MapServer é um programa CGI que mantém-se inativo em um servidor Web. Quando uma requisição é enviada ao MapServer, este usa as informações passadas na URL e um Mapfile para criar uma imagem do mapa requisitado. A requisição pode também retornar imagens da legenda, barra de escala, mapa de referência e valores (atributos) passados como variáveis CGI.
O MapServer pode ser estendido e customizado utilizando-se o MapScript ou templating. Pode ainda ser compilado para suportar diferentes tipos de arquivos vetoriais e raster como entrada, e pode gerar diferentes formatos de output. Muitas das compilações do MapServer já são preparadas para suportar os formatos de entrada e saída mais comuns.
O MapScript provê uma interface de programação para o MapServer para a construção de aplicações web ou não. O MapScript pode ser utilizado de forma independente do modo CGI, sendo carregado como um módulo em sua linguagem de programação favorita. Atualmente MapScript suporta PHP, Perl, Python, Ruby, Tcl, Java, e .NET.
Anatomia de uma aplicação com MapServer
Uma aplicação simples com MapServer consiste em:
Mapfile - Arquivo texto com parâmetros de configuração estruturados. Define a abrangência espacial do mapa, diz ao MapServer onde os dados estão e onde armazenar as saídas (imagens). Define também as camadas do mapa incluindo a fonte de dados, projeção cartográfica e simbologia. Esse arquivo deve ter a extensão ".map" ou o MapServer não irá reconhecê-lo.
Dados geográficos - MapServer pode utilizar muitos tipos de formatos de fontes de dados. O formato padrão e mais comum é o ESRI ShapeFile. Muitos outros são suportados e serão abordados mais adiante.
Páginas HTML - São as interfaces entre o usuário e o MapServer. Em sua forma mais básica, o MapServer pode ser requisitado para gerar mapas estáticos apenas devolvendo imagens que são mostradas no navegador Web. Para dar interatividade a um mapa as imagens devem ser inseridas em páginas HTML. Programas CGI não armazenam seu 'estado’, toda requisição que recebem é como uma nova e eles não relembram de qualquer outra requisição anterior que sua aplicação fez. Por essa razão, toda vez que a aplicação envia uma requisição ao MapServer, é necessário passar informações de contexto (quais camadas estão ligadas, onde você está no mapa etc.) essas informações trafegam na forma de variáveis escondidas na URL (POST).
MapServer CGI - Arquivo executável que recebe as requisições e retorna imagens, dados etc. Localiza-se no diretório cgi-bin no servidor Web. Por padrão esse programa recebe o nome mapserv e é utilizado na forma http://localhost/cgi-bin/mapserv
Web/HTTP Server - Serve as páginas HTML quando solicitadas pelo navegador Web. É necessário um servidor Web (HTTP) funcionando, como o Apache ou Microsoft Internet Information Server, no computador onde você instala o MapServer.
Usando o modo CGI
Nessa etapa faremos alguns exercícios que mostram como um arquivo mapfile é utilizado para gerar mapas.
Para continuar é necessário que o CGI do MapServer esteja instalado em seu computador. Para verificar isso digite no navegador: http://localhost/cgi-bin/mapserv.
No Windows digite: http://localhost/cgi-bin/mapserv.exe ou http://localhost/cgi-bin/mapserver.exe.
Se a instalação estiver correta, deverá aparecer na tela uma mensagem como esta:
No query information to decode. QUERY_STRING is set, but empty.
Trata-se de uma mensagem de erro normal informando que nenhum parâmetro foi fornecido mas indica que o módulo CGI está funcionando corretamente.
Exibindo um mapa e outros componentes
Vamos usar o mapfile de inicialização, criado para o curso, e gerar as imagens básicas para um mapa.
Acesse o link: http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map.
No Windows: http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\ini.map&mode=map.
Em map você deve colocar o nome do mapfile existente no servidor web onde o MapServer está instalado, o que pode variar conforme o sistema operacional.
Em mode é definido o tipo de saída, no caso é gerada a imagem do corpo do mapa.
Outros exemplos:
No Linux:
http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=legend
http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=scalebar
http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map
No Windows:
http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\ini.map&mode=legend
http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\ini.map&mode=scalebar
http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\ini.map&mode=map
Alterando parâmetros
No modo CGI muitos parâmetros podem ser passados para modificar o mapa ou ajustar a escala, tamanho, abrangência espacial, etc.
Veja os exemplos abaixo (o sinal de "+" é utilizado para substituir o espaço em branco, não tendo valor):
No Linux:
http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map&mapext=-86+-29+-20+2
No Windows:
Um mapa simples usando HTML
O CGI pode ser utilizado para inserir em páginas HTML os componentes de um mapa. Para isso basta inserir diferentes tags <img>
com a fonte (src
) definida como uma URL usada na requisição feita ao CGI.
Exemplo:
Abra o editor de textos e digite as seguintes linhas:
<html><body>
<h1>Mapa do Brasil</h1>
<img src="http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map&mapext=-86 -29 -20 2&mapsize=200 200">
</body></html>
No Windows:
<html><body>
<h1>Mapa do Brasil</h1>
<img src="http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apache\htdocs\i3geo\curso\ini.map&mode=map&mapext=-86 -29 -20 2&mapsize=200 200">
</body></html>
Salve esse arquivo na pasta i3geo/curso/teste.html e acesse o link: http://localhost/i3geo/curso/teste.html
Mapfile
Como visto anteriormente, mapfiles são arquivos texto que contém as definições referentes a um mapa.
Nessa lição iremos detalhar essas definições abordando os aspectos mais relevantes para a confecção de um mapa.
Estrutura
Um mapfile contém um texto estruturado, ou seja, formatado conforme determinadas regras.
O texto sempre começa com a palavra MAP
e termina com END
.
END
é sempre o finalizador de blocos. Blocos são partes do texto que abordam uma determinada característica ou componente do mapa. Exemplo:
MAP
NAME ""
SYMBOLSET ""
FONTSET ""
LAYER
NAME ""
END
END
Parâmetros da tag MAP
A tag MAP
contém blocos internos e também parâmetros. Para entender melhor essa estrutura abra em um editor de textos o arquivo curso/ini.map.
Os parâmetros principais são:
FONTSET
SYMBOLSET
EXTENT
IMAGECOLOR
IMAGETYPE
NAME
SIZE
SHAPEPATH
UNITS
Abrangência geográfica
EXTENT [minx] [miny] [maxx] [maxy]
Define a extensão geográfica de abrangência do mapa. No caso de mapas que utilizam coordenadas geográficas em sua projeção cartográfica:
minx - longitude oeste
miny - latitude sul
maxx - longitude leste
maxy - latitude norte
Exemplo:
Linux: http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map
Windows: http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apache\htdocs\i3geo\curso\ini.map&mode=map
Agora abra o arquivo i3geo/curso/ini.map e edite o valor de EXTENT
para:
EXTENT -180 -90 180 90
Salve o arquivo e atualize a página no navegador. O resultado é um mapa que mostra todos os países do mundo.
Modifique novamente a extensão para o valor correspondente à sua área de interesse. Se você não conhece as coordenadas corretas, utilize o i3Geo para identificar os valores.
FONTSET
e SYMBOLSET
Esses dois parâmetros recebem como valor o endereço relativo ou absoluto de arquivos armazenados no servidor. No caso de caminhos relativos, o endereço refere-se ao local do arquivo em relação ao local do mapfile.
O arquivo SYMBOLSET
contém definições dos símbolos cartográficos que podem ser utilizados no mapa, incluindo marcas pontuais, símbolos lineares e hachuras.
O arquivo FONTSET
contém as definições das fontes tipográficas utilizadas nos textos inseridos no mapa.
Um mapfile para ser considerado como válido deve conter esses dois elementos obrigatoriamente.
No caso do i3Geo os arquivos ficam armazenados na pasta i3geo/symbols.
Exemplo do conteúdo de um arquivo de fontes:
arial FreeSans.ttf
arial-bold FreeSansBold.ttf
arial-italic FreeSansOblique.ttf
verdana FreeMono.ttf
Exemplo do conteúdo de um arquivo de símbolos:
SYMBOLSET
Symbol
NAME '0'
TYPE VECTOR
FILLED TRUE
POINTS
0 0
END
END
Symbol
Name "sede"
Type PIXMAP
Image "sede.png"
Transparent 1
END
END
Cor do fundo
IMAGECOLOR [r] [g] [b]
Define a cor do fundo do mapa. Todas as definições de cores no MapServer utilizam o espaço de cor RGB (vermelho, verde e azul) que variam de 0 a 255. Para não definir uma cor qualquer, utilize sempre -1 -1 -1.
Exemplo:
Edite o arquivo i3geo/curso/ini.map e altere IMAGECOLOR
para:
IMAGECOLOR 100 0 0
Salve o arquivo e teste utilizando os links abaixo.
Linux: http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map
Windows: http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\ini.map&mode=map
Tipo de saída
IMAGETYPE [jpeg|pdf|png|svg|...|userdefined]
Define o tipo de imagem que será gerada pelo motor de renderização do MapServer.
Existem alguns tipos de saída, como JPEG, PNG ou PDF, que possuem definições internas que dependem de como o MapServer foi instalado ou compilado, o que significa que podem não funcionar em determinadas instalações.
Além desses formatos padrão, é possível definir tipos de saída customizadas utilizando-se o bloco de parâmetros OUTPUTFORMAT
. Esses blocos recebem nomes que são chamados por IMAGETYPE
quando for desejado.
Exemplo:
Copie o arquivo curso/ini.map para curso/pdf.map
Edite o arquivo novo e altere o IMAGETYPE
para PDF
IMAGETYPE PDF
Ao rodar o mapa com o link:
Linux: http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/pdf.map&mode=map
Windows: http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\Apache\htdocs\i3geo\curso\pdf.map&mode=map
Observe que aparecerá uma mensagem de erro. Para evitar essas mensagens é necessário também editar a linha:
NAME "copyright"
SIZEUNITS PIXELS
STATUS default
para:
NAME "copyright"
SIZEUNITS PIXELS
STATUS off
e a linha:
SCALEBAR
STATUS embed
para:
SCALEBAR
STATUS off
Teste novamente para obter o download do arquivo PDF.
Outros parâmetros
Outros parâmetros importantes:
NAME [name]
- prefixo que será utilizado para formar o nome dos arquivos, que serão gravados em disco, quando o modo CGI for utilizado. Utilizado para gerar as imagens correspondentes ao corpo do mapa, legenda, barra de escalas, etc.SIZE [x][y]
- tamanho em pixel da imagem produzida.SHAPEPATH [filename]
- caminho que será pesquisado para encontrar os arquivos shapefile que forem utilizados nos LAYERs do mapa. Nos LAYERS pode ser utilizado apenas o nome do arquivo sem a necessidade do caminho completo.UNITS [dd|feet|inches|kilometers|meters|miles|nauticalmiles]
- unidade de medida utilizada para computar a escala e barra de escala do mapa.
Blocos principais
Um mapfile contém os seguintes blocos dentro da tag MAP
:
LAYER
OUTPUTFORMAT
LEGEND
PROJECTION
QUERYMAP
REFERENCE
SCALEBAR
WEB
Camadas
LAYER
Inicia um bloco do tipo LAYER
. Um mapa pode ter vários layers que são mostrados na ordem que aparecem no arquivo. É nos layers que são definidas as fontes de dados e a legenda de cada camada.
Em função da importância esse bloco será tratado em um tópico específico.
Formato de saída
OUTPUTFORMAT
Inicia o bloco que define os parâmetros de um determinado tipo de saída de dados.
Podem ser definidos mais de um bloco e cada um conterá a tag NAME
. A tag IMAGETYPE
, definida para o mapa, especifica qual OUTPUTFORMAT
será utilizado.
Esse post exemplifica o efeito sobre as imagens geradas para um mapa quando são escolhidos diferentes parâmetros de saída: http://edmarmoretti.blogspot.com.br/2009/10/melhorando-os-mapas-gerados-pelo.html
Observações:
- Em
FORMATOPTION
podem ser utilizados parâmetros que são específicos doDRIVER
escolhido - Em
DRIVER
deve ser especificado apenas aqueles que foram utilizados na compilação do MapServer (utilize o i3geo/testainstal.php para ver)
Veja alguns exemplos de OUTPUTFORMAT
:
OUTPUTFORMAT
NAME "png"
DRIVER AGG/PNG
MIMETYPE "image/png"
IMAGEMODE RGB #24 bits RGB
EXTENSION "png"
FORMATOPTION "GAMMA=0.75"
END
OUTPUTFORMAT
NAME "gif"
DRIVER GD/GIF
MIMETYPE "image/gif"
IMAGEMODE PC256 #256 cores
EXTENSION "gif"
END
OUTPUTFORMAT
NAME "png8"
DRIVER AGG/PNG8
MIMETYPE "image/png; mode=8bit"
IMAGEMODE RGB
EXTENSION "png"
FORMATOPTION "QUANTIZE_FORCE=on"
FORMATOPTION "QUANTIZE_COLORS=256"
FORMATOPTION "GAMMA=0.75"
END
OUTPUTFORMAT
NAME "jpeg"
DRIVER AGG/JPEG
MIMETYPE "image/jpeg"
IMAGEMODE RGB
EXTENSION "jpg"
FORMATOPTION "GAMMA=0.75"
END
OUTPUTFORMAT
NAME "svg"
DRIVER CAIRO/SVG
MIMETYPE "image/svg+xml"
IMAGEMODE RGB
EXTENSION "svg"
END
OUTPUTFORMAT
NAME "pdf"
DRIVER CAIRO/PDF
MIMETYPE "application/x-pdf"
IMAGEMODE RGB
EXTENSION "pdf"
END
OUTPUTFORMAT
NAME "GTiff"
DRIVER GDAL/GTiff
MIMETYPE "image/tiff"
IMAGEMODE RGB
EXTENSION "tif"
END
OUTPUTFORMAT
NAME "kml"
DRIVER KML
MIMETYPE "application/vnd.google-earth.kml.xml"
IMAGEMODE RGB
EXTENSION "kml"
END
OUTPUTFORMAT
NAME "kmz"
DRIVER KMZ
MIMETYPE "application/vnd.google-earth.kmz"
IMAGEMODE RGB
EXTENSION "kmz"
END
OUTPUTFORMAT
NAME "cairopng"
DRIVER CAIRO/PNG
MIMETYPE "image/png"
IMAGEMODE RGB
EXTENSION "png"
END
Legenda
LEGEND
Inicia um bloco com parâmetros para a legenda do mapa.
A legenda pode ou não ser mostrada no corpo do mapa, pode ser requisitada separadamente via CGI (como já vimos) ou podem ser utilizado "templates" para sua formatação.
Parâmetros do bloco:
IMAGECOLOR [r] [g] [b]
- cor do fundoKEYSIZE [x][y]
- tamanho de cada retângulo que apresenta o símbolo da legendaKEYSPACING [x][y]
- espaçamento entre cada linha (y
) e entre o símbolo e o texto (x
)LABEL
- inicia um bloco que define os parâmetros dos textos presentes na legendaOUTLINECOLOR [r] [g] [b]
- cor do contorno de cada símboloPOSITION [ul|uc|ur|ll|lc|lr]
- posição da legenda no corpo do mapa (upper left
,upper center
etc.)STATUS [on|off|embed]
- indica se a legenda será desenhada (on
ouoff
) ou se fará parte do corpo do mapa quando uma imagem for requisitada (embed
)TEMPLATE [filename]
- endereço de um HTML utilizado como template para criação da legenda
O i3Geo utiliza a legenda na forma de imagem na ferramenta de impressão de mapa, mas para mostrar a legenda nos mapas interativos, são utilizados templates. Veja o item específico sobre isso no material do curso.
Projeção cartográfica
PROJECTION
Inicia um bloco com parâmetros que definem a projeção cartográfica do mapa que será gerado.
Cada LAYER
definido no mapa possui também a tag PROJECTION
, ou seja, os dados de cada LAYER
podem estar em diferentes projeções. Quando a definição de projeção de um LAYER
for diferente da definição de projeção de MAP
o MapServer faz a projeção dos dados em tempo de execução para compatibilizar as camadas.
Existem duas formas de especificar a projeção:
- Em linha
- Por código EPSG
Exemplo de projeção em linha:
PROJECTION
"proj=utm"
"ellps=GRS80"
"datum=NAD83"
"zone=15"
"units=m"
"north"
"no_defs"
END
Usando código EPSG:
PROJECTION
"init=epsg:4326"
END
Os códigos EPSG podem ser obtidos no site http://spatialreference.org/.
Os mapas interativos do i3Geo utilizam apenas as projeções "geográfica" e Mercator, sendo que esta última aplica-se apenas quando são utilizadas as interfaces que fazem uso da API do Google Maps ou de camadas baseadas no OpenStreetMap (OSM).
Caso seja especificada uma projeção métrica, como UTM por exemplo, o mapa não irá funcionar.
Destaque de seleção
QUERYMAP
Esse bloco define os parâmetros utilizados para o MapServer renderizar as camadas que possuem registros selecionados.
Dentre os parâmetros apenas um é utilizado pelo i3Geo (ciano por padrão):
COLOR [r] [g] [b]
- define a cor utilizada para renderizar os elementos selecionados de uma camada.
Mapa de referência
REFERENCE
Esse bloco define como o mapa de referência será desenhado. Esse mapa é uma imagem que possui um retângulo que mostra a extensão geográfica do mapa atual em uma escala menor que a do mapa principal.
No caso do i3Geo, os mapas interativos não utilizam esses parâmetros, mas no modo CGI ou nas ferramentas de impressão, o mapa de referência pode ser requerido e nesse caso, os parâmetros terão efeito.
Parâmetros desse bloco:
COLOR [r] [g] [b]
- cor do retângulo que será desenhado sobre a imagemEXTENT [minx][miny][maxx][maxy]
- extensão espacial do mapa de referência. Deve ser exatamente a mesma utilizada na geração da imagem que compõe o mapa de referênciaIMAGE [filename]
- endereço no servidor da imagem pré-gravada e que será utilizada como referência. Deve ser GIF.MARKER [integer|string]
- define o símbolo da marca que será utilizado quando o retângulo for muito pequenoMARKERSIZE [integer]
- tamanho do símboloMINBOXSIZE [integer]
- se o retângulo for menor que o valor definido aqui (em pixels) será utilizado uma marcaMAXBOXSIZE [integer]
- se o retângulo for maior que esse valor, nada será desenhado sobre a imagemOUTLINECOLOR [r] [g] [b]
- cor do retânguloSIZE [x][y]
- tamanho (pixels) da imagem de referência
Exemplos
Barra de escala
SCAELBAR
Inicia o bloco com as propriedades da barra de escala. Os parâmetros permitem alterar o tipo de barra, posicionar em relação ao mapa, alterar as cores e tamanho.
SIZE [x][y] (Windows)
- tamanho em pixelsINTERVALS [integer]
- número de divisões da barraALIGN [left|center|right]
- como a barra de escala é posicionada em relação à imagem que a contémBACKGROUNDCOLOR [r] [g] [b]
- cor do fundo da barra, não o fundo da imagemCOLOR [r] [g] [b]
- cor geral dos vários elementos que compõem a barraIMAGECOLOR [r] [g] [b]
- cor do fundoLABEL
- inicia o bloco que define as características dos textos da barraOUTLINECOLOR [r] [g] [b]
- cor dos contornos de cada componentePOSITION [ul|uc|ur|ll|lc|lr]
- posição em relação ao mapaSTATUS [on|off|embed]
- status da barra, será criada? Se sim, será inserida no mapa?STYLE [integer]
- estilo da barra, pode ser 0 ou 1UNITS [feet|inches|kilometers|meters|miles|nauticalmiles]
- unidade de medida utilizada na barra
Da mesma forma que o mapa de referência, o i3Geo utiliza a barra de escala apenas em ferramentas que produzem mapas para exportação de imagens ou impressão.
Observações
Os parâmetros que vimos nesse tópico são úteis em situações específicas onde o modo CGI do MapServer é utilizado.
Por exemplo, quando se quer criar mapas estáticos ou mapas que serão gerados em formatos como PDF, contendo um layout específico para impressão.
Em editores de textos, esses mapas podem ser utilizados também para compor relatórios, ilustrando o conteúdo do texto.
No i3Geo esses parâmetros não precisam ser alterados manualmente pelo usuário, havendo ferramentas que fornecem formulários para os ajustes que forem desejados.
Detalhamento do bloco LAYER
O bloco LAYER
em um mapfile é onde são inseridas as configurações de cada camada que irá ser mostrada em um mapa. Inicia e termina da seguinte forma:
LAYER
....
END
Um mapa pode ter vários layers e alguns comandos permitem relações entre eles, por exemplo, um LAYER
pode ser "mascarado" por outro ou ligado apenas quando outro também estiver ligado.
Nos exercícios dessa lição faremos uso dos principais elementos de configuração de um LAYER
.
Existe um grande número de elementos dentro de um LAYER
. Iremos tratá-los nos seguintes blocos:
- Fonte de dados
- Comportamento no mapa
- Simbologia
- Toponímia
Fonte de dados
A fonte de dados define os parâmetros de tipo de conexão, endereços e filtros. Os principais itens são:
CONNECTIONTYPE [contour|local|ogr|oraclespatial|plugin|postgis|sde|union|uvraster|wfs|wms]
- Tipo de conexão utilizada para acessar os dados. No caso de arquivos (opção 'local') como imagens ou shapefile, não é necessário usar esse itemDATA [filename]|[sde parameters][postgis table/column][oracle table/column]
- nome do arquivo, quando for do tipo 'local', ou SQL que obtém os dados de um banco.CONNECTION [string]
- string com os parâmetros de conexão com o banco de dados.TYPE [chart|circle|line|point|polygon|raster|query]
- tipo de representação primitiva doLAYER
ou natureza do tipo de dados (RASTER ou vetorial). Dados do tipo poligonal podem ser representados também como linhas e dados lineares podem ser mostrados como pontos (vértices). Alguns tipos especiais, comochart
, utilizam parâmetros diferenciados na definição da simbologia.PROJECTION
- define qual a projeção dos dados que estão sendo conectados. É definido da mesma forma que oPROJECTION
no nível do mapa. Caso a projeção não for definida, o MapServer não irá fazer nenhum tipo de conversão nos dados. Se for definida e for diferente da projeção do mapa, os dados são reprojetados para compatibilizar a representação.UNITS [dd|feet|inches|kilometers|meters|miles|nauticalmiles|percentages|pixels]
- unidade de medida utilizada na fonte dos dados.
Adição de um LAYER
com shapefile
Nessa sequência faremos a inclusão de um LAYER
em nosso mapa de inicialização tendo como fonte de dados um arquivo shape file.
- Faça uma cópia do arquivo i3geo/curso/ini.map com o nome teste.map
- Abra o mapfile i3geo/curso/teste.map em um editor de textos
- No final do arquivo, antes do último item
END
, digite as linhas abaixo
LAYER
NAME 'rios' #codigo da nova camada
TYPE line #natureza dos dados
DATA '/var/www/i3geo/aplicmap/dados/sc22/RIO_PERMANENTE.shp' #arquivo shapefile, note que deve ser exatamente igual ao nome do arquivo
#se estiver usando Windows comente a linha acima e descomente a linha abaixo
#DATA 'c:\ms4w\apache\htdocs\i3geo\aplicmap\dados\sc22\RIO_PERMANENTE.shp'
STATUS DEFAULT #indica que será mostrado no mapa
CLASS #simbologia
NAME 'Rios permanentes' #nome da classe na legenda
COLOR 0 0 255 #cor das linhas
END #fim de CLASS
END #fim de LAYER
Para testar a camada, utilize a seguinte URL que usa o CGI do MapServer:
http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/teste.map&mode=map
No Windows:
http://localhost/cgi-bin/mapserv.exe?map=c:/ms4w/apache/htdocs/i3geo/curso/teste.map&mode=map
Para testar usando o próprio i3Geo, podem ser utilizadas as seguintes URLs:
http://localhost/i3geo/testamapfile.php?map=/var/www/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=/var/www/i3geo/curso/teste.map
No Windows utilize:
http://localhost/i3geo/testamapfile.php?map=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
Observe que essa última URL mostra várias camadas sobrepostas. Isso ocorre porque o i3Geo utiliza um mapa de inicialização que já contém algumas camadas e adiciona as outras que estiverem definidas no mapfile que será aberto.
Para evitar isso, edite o arquivo teste.map e apague todos os layers, menos o que contém os rios. Não se esqueça de apagar do início até o fim de cada um deles, ou seja, de LAYER
até END
, inclusive.
Adição de um LAYER
PostGIS
Nessa sequência faremos a inclusão de um LAYER em nosso mapa de inicialização tendo como fonte de dados um arquivo shape file.
- Abra o mapfile i3geo/curso/teste.map em um editor de textos
- No final do arquivo, antes do último item
END
, digite as linhas abaixo:
LAYER
NAME 'bairros' #codigo da nova camada
TYPE polygon #natureza dos dados
CONNECTION "user=postgres password=postgres dbname=i3geosaude host=localhost port=5432" #string de conexao
CONNECTIONTYPE POSTGIS #tipo de conexão
DATA "the_geom from ( SELECT * from i3geo_metaestat.bairros ) as foo using unique gid using srid=4326" #sql de acesso aos dados
STATUS DEFAULT #indica que será mostrado no mapa
CLASS #simbologia
NAME 'Bairros IBGE' #nome da classe na legenda
COLOR 255 0 0 #cor das linhas
OUTLINECOLOR 0 255 0
END #fim de CLASS
END #fim de LAYER
Para testar usando o próprio i3Geo, podem ser utilizadas as seguintes URLs:
http://localhost/i3geo/testamapfile.php?map=/var/www/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=/var/www/i3geo/curso/teste.map
No Windows utilize:
http://localhost/i3geo/testamapfile.php?map=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
Comportamento no mapa
Vários elementos controlam como um LAYER
irá se comportar em um mapa interativo. Dentre esses elementos, os principais que são considerados pelo i3Geo são:
FILTER [string]
- utilizado para impedir que determinados componentes da camada sejam renderizados. O filtro opera sobre a tabela de atributos, mesmo que seja utilizado shapefile. Por exemplo, o seguinte filtro mostrará no mapa apenas os elementos que na coluna TIPO ocorra a string'permanente': FILTER ([TIPO]='permanente')
. Para mais informações sobre como montar o filtro, veja em: http://mapserver.org/mapfile/expressions.htmlMASK [layername]
- indica que os componentes doLAYER
atual serão renderizados apenas se ocorrer a intersecção com um outroLAYER
existente no mapa. Utilizado para criar máscaras que mostrem apenas uma determinada região de um conjunto de dados cuja abrangência espacial é maior que a desejada.MAXFEATURES [integer]
- número de elementos que serão renderizados em cada extensão geografica solicitada. Em conjunto de dados que são ordenados pelo tamanho, permite mostrar apenas os maiores.MAXSCALEDENOM [double]
- oLAYER
só será renderizado se a escala do mapa for no mínimo o valor especificado (denominador). Por exemplo, se o valor for 500000, apenas não ocorrerá o desenho na escala 1:500.001. é útil para evitar que sejam mostrados no mapa dados em escalas inadequadas em relação à fonte dos dados.MINSCALEDENOM [double]
- complementaMAXSCALEDENOM
OFFSITE [r] [g] [b]
- em camadas com dados RASTER, os pixels nessa cor são considerados como totalmente transparentes.OPACITY [integer|alpha] (Windows)
- valor de 0 a 100 indicando o grau de opacidade da camada.SYMBOLSCALEDENOM [double]
- escala que será utilizada para considerar o tamanho dos símbolos igual ao especificado. Conforme o mapa muda de escala, o tamanho do símbolo também muda proporcionalmente ao tamanho original.
Classes e simbologia
A renderização do mapa utiliza estilos gráficos definidos em classes.
Cada LAYER
deve conter pelo menos uma classe, e nesse caso, todos os componentes são renderizados com o mesmo estilo, por exemplo, todos com a mesma cor.
Quando se deseja utilizar representações diferentes para cada tipo de componente devem ser criadas várias classes. Cada classe deverá ter uma expressão que indica que componentes pertencem a ela, tendo como base a tabela de atributos ou cálculos feitos sobre a geometria (cálculo de área por exemplo).
Exemplificando, podemos ter uma classe que utilize a cor azul para os rios permanentes e azul claro para os rios intermitentes.
Em um LAYER
, utiliza-se dessa forma:
LAYER
CLASS
STYLE
END
STYLE
END
END
CLASS
END
END
Classes
As classes são utilizadas para criar entradas na legenda do LAYER
e especificar a simbologia e as regras para que um registro entre na classe.
Classes simples, sem regras, fazem com que todos os registros sejam utilizados e renderizados com uma única simbologia. Como vimos no exemplo dos rios.
Exemplo de classificação:
Complete o LAYER
com os rios do mapfile teste.map removendo a classe existente e incluindo as seguintes:
CLASS
NAME "Primeira Ordem"
EXPRESSION ('[CD_CLASSE_]'eq'Primeira Ordem')
STYLE
COLOR 191 194 201
END # STYLE
END # CLASS
CLASS
NAME "Segunda Ordem"
EXPRESSION ('[CD_CLASSE_]'eq'Segunda Ordem')
STYLE
COLOR 255 0 0
END # STYLE
END # CLASS
Teste novamente com a URL:
http://localhost/i3geo/testamapfile.php?map=/var/www/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=/var/www/i3geo/curso/teste.map
No Windows utilize:
http://localhost/i3geo/testamapfile.php?map=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
http://localhost/i3geo/mashups/openlayers.php?temas=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
Principais parâmetros de uma classe
Além do estilo, cujos parâmetros veremos a seguir, cada classe pode ter os seguintes parâmetros principais:
NAME [string]
- nome que será utilizado na legenda.KEYIMAGE [filename]
- nome de um arquivo (imagem) que será utilizado no lugar da geração automática da legenda.MAXSCALEDENOM [double]
eMINSCALEDENOM [double]
- operam como explicado para oLAYER
, mas afeta cada classe individualmente.TEXT [string|expression]
- contém uma expressão que define como cada componente receberá um texto (LABEL
). As expressões podem ser simples, comoTEXT '[FIRSTNAME] [LASTNAME]'
ou mais complexas, comoTEXT ("Area é: " + tostring([area],"%.2f"))
Estilos
Cada classe pode conter um ou mais estilos para definir qual a simbologia utilizada. Cada estilo contém as definições de cor, marcas, hachuras, tipos de linhas, etc. Utilizando-se vários estilos podemos criar símbolos compostos, como é mostrado no exemplo abaixo.
Os símbolos podem ter como origem um arquivo de símbolos ou podem ser definidos no próprio mapfile.
Principais parâmetros de um estilo
Os principais parâmetros utilizados na definição de estilos são apresentados abaixo. Mais detalhes no endereço: http://mapserver.org/mapfile/style.html#style
ANGLE [double|attribute|AUTO]
- ângulo definido em graus para rotacionar o símbolo no sentido do relógio. Pode ser um valor de 0 até 360 ou uma coluna na tabela de atributos. No caso de pontos, a rotação é relativa ao centro. Para linhas o eixo x é orientado no sentido da linha mas os efeitos dependem do valor deGAP
. Para polígonos, define o ângulo das linhas internas em símbolos com hachuras. O valorAUTO
se aplica apenas em conjunto comGEOTRANSFORM
COLOR [r] [g] [b] | [hex string] | [attribute] (Windows)
- cor definida em RGB ou em Hexadecimal. Uma coluna da tabela de atributos pode ser utilizada.GAP [double] (Windows)
- distância entre símbolos. No caso de polígonos preenchidos, afeta tanto a distância em x como em y. Para linhas, o centro do símbolo é posicionado sobre a linha.GEOMTRANSFORM [bbox|end|labelpnt|labelpoly|start|vertices|<expression>]
- modifica o comportamento normal do uso dos símbolos aplicando uma transformação antes de usar o símbolo.bbox
: produz o desenho de um retângulo abrangendo cada componente da camada.centroid
: calcula o centróide.end
oustart
: retorna apenas o último vértice ou o primeiro de cada linha.labelpnt
: no desenho de textos, retorna um ponto na âncora do texto.labelpoly
: produz um retângulo que abrange o texto desenhado.vertices
: produz pontos em todos os vértices de linhas ou polígonos.<expression>
: aplica transformações que utilizam parâmetros adicionais:(buffer([shape],dist))
: gera um contorno com distância definida em pixels.(simplify([shape],tolerance))
: simplifica a geometria usando a técnica de Douglas-Peucker.(simplifypt([shape],tolerance))
: aplica a simplificação garantindo que o resultado seja uma forma válida, com a mesma dimensão do original.(generalize([shape],tolerance))
: simplifica a geometria utilizando uma técnica igual do FME's ThinNoPoint.(smoothsia([shape], smoothing_size, smoothing_iteration, preprocessing))
: suaviza uma geometria utilizando a técnica SIA
SYMBOLMAXSCALEDENOM [double]
eSYMBOLMINSCALEDENOM
- operam como no caso da definição dentro de umLAYER
mas afeta cada estilo separadamente.OFFSET [x][y]
- desloca um símbolo em pixels.OPACITY [integer|attribute]
- opacidade, de 0 a 100.OUTLINECOLOR [r] [g] [b] | [attribute] (Windows)
- cor utilizada para desenhar o contorno de polígonos e de alguns tipos de símbolos.OUTLINEWIDTH [double|attribute]
- largura da linha de contorno.PATTERN [double on] [double off] [double on] [double off] ... END
- padrão de repetição dos componentes de um símbolo. Utilizado para compor linhas tracejadas, por exemplo.SIZE [double|attribute] (Windows)
- tamanho do símbolo. No caso de hachuras, corresponde ao espaçamento entre as linhas.SYMBOL [integer|string|filename|url|attribute]
- símbolo que será utilizado. Se for um número ou uma string deve corresponder ao código ou índice existente no arquivo de símbolos carregado no mapfile. Se for o nome de um arquivo, corresponde ao endereço de uma imagem existente no servidor. Pode ainda ser um endereço na WEB de uma imagem ou uma coluna na tabela de atributos que define o nome do símbolo.WIDTH [double|attribute] (Windows)
- corresponde a espessura de uma linha, que pode ser o contorno de polígonos ou uma linha simples.
Exemplos de uso de estilos
Artigo mostrando como modificar os símbolos conforme a escala do mapa:
http://edmarmoretti.blogspot.com.br/2010/11/representacao-de-um-mesmo-elemento-como.html
Símbolo único:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=amazlegal
Contorno de polígonos:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=bacias
Índice de imagens de satélite:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=aster_2000_2007
Classificação:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=arv_hidrogeologia
Pontos:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=passaros_pontual
Linhas:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=zee_fluxo_bovino_aml
Mosaico de imagens:
http://mapas.mma.gov.br/i3geo/testamapfile.php?map=landsatetm8
Inclusão de textos
A inclusão de textos, nomeando os elementos de uma camada, é feita acrescentando o item LABEL
dentro de um estilo de cada classe.
O LAYER
que receberá os textos pode ter sido criado apenas para isso, sem renderizar outros elementos.
Exemplo:
- Edite o arquivo i3geo/curso/teste.map e remova os layers existentes.
- Crie um novo
LAYER
com o seguinte código:
LAYER
DATA "/var/www/i3geo/aplicmap/dados/mundo"
NAME "mundot"
STATUS DEFAULT
TEMPLATE "none.htm"
TYPE POLYGON
CLASS
NAME ""
LABEL
SIZE 10
COLOR 150 150 150
FONT "arial"
TYPE truetype
TEXT '[CNTRY_NAME]'
END
END
END
Salve e teste com:
http://localhost/i3geo/testamapfile.php?map=/var/www/i3geo/curso/teste.map
No Windows utilize:
http://localhost/i3geo/testamapfile.php?map=c:/ms4w/apache/htdocs/i3geo/curso/teste.map
Principais parâmetros para LABELS
Veja os principais parâmetros de configuração de textos. Alguns possuem links que permitem explorar melhor os valores.
ALIGN [left|center|right] - define como o texto é alinhado quando a opção
WRAP` também for definida.ANGLE [double|auto|auto2|follow|attribute] (Windows)
- ângulo em graus.AUTO
- é válido apenas para linhasAUTO2
- considera também o sentido das linhas, podendo ser desenhado de ponta-cabeçaFOLLOW
- segue o contorno das linhas
BUFFER [integer]
- distância em pixels ao redor do texto. Usado para evitar colisões. Válido apenas quando se usa o cache.COLOR [r] [g] [b] | [attribute] (Windows)
- cor do texto.ENCODING [string]
- codificação de caracteres. Depende da instalação da biblioteca iconv no servidor. Usado para resolver problemas com acentuação.EXPRESSION [string]
- determina quando o texto é desenhado. Funciona como no elementoCLASS
.FONT [name|attribute]
- tipografia do texto. Utilize apenas o que estiver definido no arquivoFONTSET
.FORCE [true|false]
- força o desenho dos textos mesmo que ocorram colisões entre os que estão no cache.MAXLENGTH [integer]
- quando a quebra de linhas está ativa, ela ocorrerá considerando esse valor, que controla o comportamento da quebra.MAXOVERLAPANGLE [double]
- margem utilizada para remover textos que se sobrepõem quandoANGLE FOLLOW
.MAXSCALEDENOM
,MINSCALEDENOM
,MAXSIZE
,MINFEATURESIZE
e MAXFEATURESIZE- operam como no explicado para
CLASS`.MINDISTANCE [integer]
- distância mínima entre textos duplicados.OFFSET [x][y]
- deslocamento em relação ao posicionamento normal, considerando o canto inferior esquerdo. Pode ser negativo. QuandoFOLLOW
estiver ativo, pode ser utilizado um segundo parâmetro, exemploOFFSET 20 99
ouOFFSET 20 -99
.99
desenhará à esquerda ou direita e-99
acima ou abaixo.OUTLINECOLOR [r] [g] [b] | [attribute]
- cor de uma borda de um pixel.OUTLINEWIDTH [integer]
- espessura do outline (default é 1).PARTIALS [true|false]
- o texto pode extrapolar a borda do mapa?POSITION [ul|uc|ur|cl|cc|cr|ll|lc|lr|auto]
- posição do texto em relação ao ponto de ancoragem.PRIORITY [integer]|[item_name]|[attribute]
- prioridade, entre 1 e 10. Os textos são colocados em memória antes de serem desenhados. A prioridade define qual será utilizado primeiro.REPEATDISTANCE [integer]
- os textos serão repetidos em uma linha conforme o valor definido (em pixels).SHADOWCOLOR [r] [g] [b]
- cor de um clone do texto que será desenhado na mesma posição, gerando um efeito de sombra.SHADOWSIZE [x][y]|[attribute][attribute]|[x][attribute]|[attribute][y]
- espaçamento da sombra.SIZE [double]|[tiny|small|medium|large|giant]|[attribute]
- tamanho do texto.STYLE
- inicia um bloco de estilo que permite especificar transformações como seguem:GEOMTRANSFORM [labelpnt|labelpoly]
- cria uma geometria do tipo ponto ou poligonal sobre o texto.
TEXT [string|expression]
- texto fixo que será inserido em cada elemento da camada ou coluna da tabela de atributos. ExemploTEXT '[NOME]'
TYPE [bitmap|truetype]
- tipo de fonte (tipografia) utilizada. bitmap opera em qualquer sistema e truetype depende da lista de fontes indicadas no arquivoFONTSET
.WRAP [character]
- caractere que será utilizado para quebrar linhas de texto. Interage com MAXLENGTH.
Como o i3Geo utiliza mapfiles
O i3Geo permite que se utilize arquivos mapfiles para configurar as camadas que serão utilizadas nos mapas e serviços.
Esses mapfiles são simplificados e não precisam ter os itens que configuram o mapa. Essas configurações gerais do MAP são obtidas de um arquivo mapfile de inicialização, cuja localização é definida nas variáveis de configuração do i3Geo (arquivo ms_configura.php) ou automaticamente, conforme a versão do MapServer e do sistema operacional.
No caso desse curso, esse arquivo de inicialização é i3geo/curso/ini.map.
Mapfiles de temas
Para cada camada que se quer utilizar no i3Geo deve ser criado um mapfile armazenado na pasta i3geo/temas. Esse mapfile normalmente contém apenas um layer, cujo NAME
corresponde ao mesmo nome utilizado no nome do arquivo.
Exemplo:
Abra o editor de textos e insira o seguinte texto:
MAP
FONTSET "../symbols/fontes.txt"
SYMBOLSET "../symbols/simbolosv6.sym"
LAYER
DATA "/var/www/i3geo/aplicmap/dados/sc22/AEROPORTO_CAMPO_DE_POUSO.shp"
#DATA "c:/ms4w/apache/htdocs/i3geo/aplicmap/dados/sc22/AEROPORTO_CAMPO_DE_POUSO.shp"
METADATA
"CLASSE" "SIM"
"TEMA" "Aeroportos SC22"
END
NAME "_cursoaeroporto"
STATUS OFF
TEMPLATE "none.htm"
TYPE POINT
UNITS METERS
CLASS
NAME ""
STYLE
COLOR 255 0 0
OUTLINECOLOR 0 0 0
SYMBOL 'ponto'
SIZE 15
END
END
END
END
Salve com o nome i3geo/temas/_cursoaeroporto.map
Observações:
- O i3Geo utiliza metadados especiais para controlar algumas características da camada.
- O metadata
CLASSE
indica que a camada aparecerá na legenda do mapa. - O metadata
TEMA
corresponde ao título da camada e será utilizada na legenda e lista de camadas de um mapa interativo.
Visualização do tema
Agora que temos um novo tema, podemos visualizar no mapa.
Para testar o mapa:
http://localhost/i3geo/testamapfile.php?map=_cursoaeroporto
Para abrir no i3Geo com a interface normal e com a camada ligada (&layers=
define quais LAYERS
serão ligados ao iniciar):
http://localhost/i3geo/ms_criamapa.php?temasa=_cursoaeroporto&layers=_cursoaeroporto
Para abrir com outra interface (as interfaces devem estar armazenadas em i3geo/interface):
Para abrir com o mapa simples:
http://localhost/i3geo/mashups/openlayers.php?temas=_cursoaeroporto