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

alt 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

http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=map&mapext=-86+-29+-20+2&mapsize=200+200

No Windows:

http://localhost/cgi-bin/mapserv?map=c:\ms4w\apache\htdocs\i3geo\curso\ini.map&mode=map&mapext=-86+-29+-20+2&mapsize=200+200&map.scalebar=status+off

http://localhost/cgi-bin/mapserv?map=c:\ms4w\apache\htdocs\i3geo\curso\ini.map&mode=map&mapext=-86+-29+-20+2&mapsize=200+200&map.scalebar=status+off&map.layer[mundo].class[0].style[0]=COLOR+151+51+151

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 do DRIVER 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 fundo
  • KEYSIZE [x][y] - tamanho de cada retângulo que apresenta o símbolo da legenda
  • KEYSPACING [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 legenda
  • OUTLINECOLOR [r] [g] [b] - cor do contorno de cada símbolo
  • POSITION [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 ou off) 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 imagem
  • EXTENT [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ência
  • IMAGE [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 pequeno
  • MARKERSIZE [integer] - tamanho do símbolo
  • MINBOXSIZE [integer] - se o retângulo for menor que o valor definido aqui (em pixels) será utilizado uma marca
  • MAXBOXSIZE [integer] - se o retângulo for maior que esse valor, nada será desenhado sobre a imagem
  • OUTLINECOLOR [r] [g] [b] - cor do retângulo
  • SIZE [x][y] - tamanho (pixels) da imagem de referência

Exemplos

Linux: http://localhost/cgi-bin/mapserv?map=/var/www/i3geo/curso/ini.map&mode=reference&mapext=-46+-20+-40+2&map.reference=outlinecolor+255+0+0

Windows: http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apache\htdocs\i3geo\curso\ini.map&mode=reference&mapext=-46+-20+-40+2&map.reference=outlinecolor+255+0+0

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 pixels
  • INTERVALS [integer] - número de divisões da barra
  • ALIGN [left|center|right] - como a barra de escala é posicionada em relação à imagem que a contém
  • BACKGROUNDCOLOR [r] [g] [b] - cor do fundo da barra, não o fundo da imagem
  • COLOR [r] [g] [b] - cor geral dos vários elementos que compõem a barra
  • IMAGECOLOR [r] [g] [b] - cor do fundo
  • LABEL - inicia o bloco que define as características dos textos da barra
  • OUTLINECOLOR [r] [g] [b] - cor dos contornos de cada componente
  • POSITION [ul|uc|ur|ll|lc|lr] - posição em relação ao mapa
  • STATUS [on|off|embed] - status da barra, será criada? Se sim, será inserida no mapa?
  • STYLE [integer] - estilo da barra, pode ser 0 ou 1
  • UNITS [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 item
  • DATA [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 do LAYER 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, como chart, 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 o PROJECTION 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.html
  • MASK [layername] - indica que os componentes do LAYER atual serão renderizados apenas se ocorrer a intersecção com um outro LAYER 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] - o LAYER 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] - complementa MAXSCALEDENOM
  • 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] e MINSCALEDENOM [double] - operam como explicado para o LAYER, 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, como TEXT '[FIRSTNAME] [LASTNAME]' ou mais complexas, como TEXT ("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 de GAP. Para polígonos, define o ângulo das linhas internas em símbolos com hachuras. O valor AUTO se aplica apenas em conjunto com GEOTRANSFORM
  • 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 ou start: 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] e SYMBOLMINSCALEDENOM - operam como no caso da definição dentro de um LAYERmas 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çãoWRAP` também for definida.
  • ANGLE [double|auto|auto2|follow|attribute] (Windows) - ângulo em graus.
    • AUTO - é válido apenas para linhas
    • AUTO2 - considera também o sentido das linhas, podendo ser desenhado de ponta-cabeça
    • FOLLOW - 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 elemento CLASS.
  • FONT [name|attribute] - tipografia do texto. Utilize apenas o que estiver definido no arquivo FONTSET.
  • 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 quando ANGLE FOLLOW.
  • MAXSCALEDENOM, MINSCALEDENOM, MAXSIZE, MINFEATURESIZE e MAXFEATURESIZE- operam como no explicado paraCLASS`.
  • 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. Quando FOLLOW estiver ativo, pode ser utilizado um segundo parâmetro, exemplo OFFSET 20 99 ou OFFSET 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. Exemplo TEXT '[NOME]'
  • TYPE [bitmap|truetype] - tipo de fonte (tipografia) utilizada. bitmap opera em qualquer sistema e truetype depende da lista de fontes indicadas no arquivo FONTSET.
  • 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):

http://localhost/i3geo/ms_criamapa.php?temasa=_cursoaeroporto&layers=_cursoaeroporto&interface=black_gm.phtml

Para abrir com o mapa simples:

http://localhost/i3geo/mashups/openlayers.php?temas=_cursoaeroporto


Last edited by Murilo Caixêta