MAPServer Caio Nakashima Webmapping é uma técnica para visualização de dados geográficos através de aplicações web (Internet/Intranet). Dependendo do tipo da aplicação, pode-se eventualmente inferir nos dados geográficos através da própria interface web. é uma alternativa de consulta de informações, que eventualmente pode se tornar muito poderosa se combinada à metodologias como Relatórios e Gráficos. não é um SIG( Sistema de Informação Geográfica) Vantagens aplicações mais fáceis de se utilizar independência de plataforma: basta um navegador para acessar a aplicação mobilidade do usuário: o usuário só precisa de uma estação com navegador e acesso à web. Não precisa de uma estação fixa centralização de dados: as informações ficam centralizadas no servidor interoperabilidade: aplicações web podem interagir com sistemas desktop ou outros sistemas web Desvantagens dependendo da conexão à Internet utilizada, o desempenho pode não ser tão ágil como normalmente são aplicações acessando dados locais operações de processamento pesado de dados, normalmente não são possíveis em ambiente SIG SIG Um Sistema de Informação Geográfica (SIG ou GIS - Geographic Information System, do acrônimo inglês) é um sistema de hardware, software, informação espacial e procedimentos computacionais, que permite e facilita a análise, gestão ou representação do espaço e dos fenômenos que nele ocorrem. Exemplo SIG Um exemplo bem conhecido de um protoSIG é o trabalho desenvolvido pelo Dr. John Snow em 1854 para situar a fonte causadora de um surto de cólera na zona do Soho em Londres, cartografando os casos detectados. Esse protoSIG permitiu a Snow localizar com precisão um poço de água contaminado como fonte causadora do surto. Exemplo WEB Mapping Navegador web: este é o software de interface de usuário. Por meio de um navegador - como FireFox, Konqueror, Internet Explorer, Netscape Navigator ou Opera – o usuário acessa um endereço que contém a aplicação Web; O servidor web, como o Apache ou IIS é o software responsável pela publicação de textos, arquivos HTML, imagens e hyperlinks em uma conexão web; Motor Webmpping O servidor web comunica-se com um "motor webmapping" – como o MapServer ou ESRI ArcIMS – que é o componente responsável por realizar a leitura parametrizada de arquivos de dados geográficos( mapas), efetuar uma operação específica( aproximar, afastar, deslocar, classificar, localizar, etc...) e converter o resultado de uma consulta em uma imagem( GIF, PNG, JPG); Customização Caso a aplicação necessite de uma grau de customização além do padrão que o software de webmapping dispôr, em algumas ferramentas há a possibilidade de se efetuar uma customização mais aprimorada usandose linguagens de programação; Dados Geográficos Os dados geográficos devem ser armazenados em formato padrão suportado pelo software de webmapping ou diretamente no banco de dados, caso este suporte dados espaciais; Banco de Dados O banco de dados compreende as informações de interesse dos usuários e deve estar estruturado de modo que seus dados possam ser relacionados aos dados geográficos e conseqüentemente possibilitar o usuário a obter respostas coesas relacionadas ao seu negócio. Tendências Interoperabilidade é cada vez mais comum, seja em ambientes públicos ou privados, a necessidade de se integrar dados oriundos de diferentes fontes e formatos; Compatibilidade com padrões mundiais iniciativas como as do Open Geospatial Consortium visam a definição de especificações padrão para o desenvolvimento de aplicações SIG. http://www.opengeospatial.org/ Dessa forma, teoricamente, será possível realizar a substituição de softwares sem a necessidade de se alterar estruturas de dados; Migrando para SIG Aproximação ao SIG: com a evolução de hardware, software e com a própria evolução da Internet, é natural que as aplicações de webmapping se enriqueçam cada vez mais de recursos, tornando-se mais próximas dos SIGs. História 1996 ForNet: em uma parceria entre a UMN e o Minnesota DNR , sob patrocínio da NASA, o projeto ForNet visa prover equipes da área florestal com produtos obtidos a partir de imagens de sensoriamento remoto. Dentre os requisitos do projeto, havia a necessidade de se entregar dados geográficos via internet 1997 MapServer 1.0: desenvolvido em C, por Stephen Lime, para uso no projeto ForNet. Foi usada a biblioteca ShapeLib( para manipulação de ShapeFiles) e a biblioteca GD( para geração das imagens) História (2) 2000 MapServer 3.0 TerraSIP: neste outro projeto financiado pela NASA, o desenvolvimento do MapServer continua Daniel Morissette( da DM Solutions) adere ao desenvolvimento do MapServer Suporte a dados matriciais( através da biblioteca LibTIFF) e fontes TrueType( biblioteca FreeType) adicionados surge o website oficial do MapServer que torna-se então um projeto Open Source de conhecimento público História (3) 2004 1.200 usuários inscritos na lista de discussão oficial 2nd MapServer Users Meeting: reuniu 220 pessoas e ampliou o foco para outras tecnologias Open Source para SIG Fórum ptMapServer é cedido ao G10/Univali 1° Encontro Nacional de Usuários MapServer: reuniu cerca 100 visitantes na Univali em Itajaí/SC 2005 3rd MapServer Users Meeting 3 livros sobre MapServer chegam ao mercado: Web Mapping Illustrated - Tyler Mitchell MapServer : Open Source GIS Development - Bill Kropla Características Dados de Entrada ShapeFiles ArcSDE Oracle Spatial PostGIS MySQL formatos OGR: a biblioteca OGR fornece acesso a diversos formatos vetoriais ODBC( somente tabelas de pontos) MapInfo DGN CSV GML e outros Dados matriciais TIFF/GeoTIFF JPEG GIF PNG EPPL7 formatos GDAL: a biblioteca GDAL fornece acesso a diversos formatos matriciais ECW ENVI HDF ERDAS PCRaster e outros Formatos de Saída O MapServer pode gerar mapas nos seguintes formatos: PNG JPEG GIF WBMP ( para WAP) SWF ( Flash) PDF SVG DXF formatos GDAL Funcionalidades indexação espacial para ShapeFiles customização através de arquivos "template" ou MapScript seleção de objetos por ponto, área, valor ou item suporte a fontes TrueType legenda, barra de escala, mapa de referência e controles de navegação desenho de objetos de acordo com a escala mapas tematicos a partir de expressões lógicas, regulares ou constantes string sistema anti-colisão para rótulos(labels) reprojeção de dados cartográficos em tempo de execução(PROJ.4) configuração de parâmetros via URLs compatibilidade OGC WMS - implementa os modos servidor e cliente WFS - implementa os modos servidor e cliente WCS - implementa o modo servidor WMC SLD GML Filter encoding Funcionamento do MapServer CGI Esta é a maneira mais simples de se trabalhar com o MapServer. Quando se utiliza o MapServer em modo CGI, o seu arquivo executável deve ser colocado em diretório apropriado do servidor web. Este executável irá receber parâmetros de inicialização da aplicação webmapping, processar as requisições solicitadas e retornar ao aplicativo cliente( navegador) o resultado esperado (imagens do mapa, legenda, barra de escala, mapa de referência, ou mesmo códigos HTML). http://mapserver.gis.umn.edu/download/current MapScript Historicamente o conceito do MapScript foi introduzido em 2001 quando a canadense DM Solutions disponibilizou a API do MapServer para a linguagem de programação PHP, numa extensão chamada de PHP/MapScript. De maneira sucinta, o MapScript é a disponibilização dos recursos do MapServer para linguagens de programação. Dessa forma, pode-se combinar os recursos do MapServer com recursos da sua linguagem de programação preferida, visando a criação de aplicações com um grau de customização maior, eventualmente não atingido com aplicações do MapServer em modo CGI. O MapServer MapScript está disponível para as seguintes linguagens de programação: PHP Python Perl Ruby TCL Java C# http://www.maptools.org/php_mapscript/index.phtml WebServices O MapServer implementa algumas especificações do Open Geospatial Consortium - e mais precisamente as especificações WMS, WFS e WCS - que permitem o desenvolvimento de aplicações que fazem o MapServer operar como um serviço de mapas via web. Dessa forma, pode-se utilizar o MapServer para disponibilizar dados via web que serão acessados via aplicações desktop como ArcView, ArcExplorer, ArcGIS, Quantum GIS, JUMP, uDig ou mesmo por aplicações web. Estrutura geral de uma aplicação MapServer Mapas MapFile Formulário de inicialização Arquivos Template Mapas Antes de mais nada, é preciso ter em mãos os mapas que se deseja publicar com uma aplicação MapServer. Os mapas são enfim, os dados de entrada de sua aplicação e devem estar em um formato que possa ser lido pelo MapServer. ftp://geoftp.ibge.gov.br/mapas/ http://commons.wikimedia.org/wiki/Category:Maps_o f_Brazil MapFile O MapFile é um arquivo de extensão .map, em formato texto puro, que faz todas as definições e configurações iniciais necessárias para execução de uma aplicação MapServer. Este arquivo é lido pelo MapServer em cada interação do usuário com a aplicação e define diversas características da aplicação como: que mapas serão disponibilizados? como estes mapas serão apresentados? com que cor? com que símbolo? até que escala o usuário poderá aproximar-se? Ou seja, o MapFile define como os MAPAS( dados) serão apresentados ao usuário Formulário de inicialização Em aplicações MapServer em modo CGI, é necessário a presença de um "formulário de inicialização" da aplicação. Este formulário é uma declaração em HTML que enviará ao executável do MapServer parâmetros básicos para a inicialização da aplicação, tais como o caminho do MapFile e endereço(URL) do MapServer CGI. Arquivos Template Os arquivos Template definem a interface ou design da aplicação. Definem como os componentes gerados pelo MapServer mapa, legenda, barra de escala, etc...) serão apresentados para o usuário e de que forma o usuário poderá interagir com a aplicação. Descrição dos Arquivos sp_uf: shapefile de tipo polígono representando os limites do estado de São Paulo sp_muni: shapefile de tipo polígono representando os limites dos municípios do estado de São Paulo sp_rvia: shapefile de tipo linha representando as rodovias do estado de São Paulo sp_sede: shapefile de tipo ponto representando as sedes municipais do estado de São Paulo Utilização do MapFile MAP EXTENT -53.110 -25.312 -44.161 -19.779 SHAPEPATH "mapas" SIZE 400 300 LAYER NAME "uf" TYPE POLYGON DATA "sp_uf" STATUS DEFAULT CLASS NAME "São Paulo" OUTLINECOLOR 0 0 0 COLOR 255 255 192 END END END exercicio01.map Forma de Chamar o Mapa http://localhost/cgi-bin/mapserv.exe?map=C:/Arquivos de Programas/Apache Group/Apache/htdocs/learn2mapit/intro_mapserver/exerci cio01.map&mode=map http://localhost/cgi-bin/mapserv.exe? map=C:/CAIO/curso/www/exercicio01.map&mode=map Resultado Dividindo esta url em várias partes teremos: http://localhost/cgi-bin/mapserv.exe? map=C:/CAIO/curso/www/exercicio01.map&mode=map localhost : é o endereço do servidor web /cgi-bin/mapserv : indica o arquivo executável(binário) do MapServer CGI. Neste caso, ele se encontra na pasta "cgi-bin" map : Este parâmetro indica a localização do MapFile a ser interpretado pelo MapServer. mode : este parâmetro indica o modo de operação do MapServer. Neste caso, o modo map resultada na MAP File Linha 1: A palavra reservada MAP define o início do MapFile. O objeto MAP é o elemento raiz de um MapFile e todos os outros objetos e propriedades são definidos hierarquicamente abaixo deste elemento. Na linha 18 a palavra END finaliza a definição do objeto MAP. Linha 2 EXTENT -53.110 -25.312 -44.161 -19.779 A propriedade EXTENT define o retângulo envolvente do mapa na inicialização da aplicação. Os valores informados por estas coordenadas expressam a menor área retangular que faça a cobertura dos mapas da aplicação em sua inicialização. Cada um dos quatro valores que compõem a propriedade EXTENT deve ser informado em formato de número decimal, usando-se o ponto(.) para delimitação de casas decimais. Extent O primeiro par de valores define o canto inferior esquerdo do retângulo envolvente e o segundo par de valores define o canto superior direito do retângulo. c:\MapServer\bin\ogrinfo.exe -all sp_uf.shp >lixo.txt INFO: Open of `sp_uf.shp' using driver `ESRI Shapefile' successful. Layer name: sp_uf Geometry: Polygon Feature Count: 1 Extent: (-53.109609, -25.311932) - (-44.160556, 19.779323) Layer SRS WKT: SHAPEPATH e SIZE Linha 3 a propriedade SHAPEPATH define o caminho relativo (ao MapFile) ou caminho absoluto dos arquivos de mapas (ShapeFiles, GeoTIFFs, etc...). Linha 4 a propriedade SIZE define as dimensões (largura X altura) da imagem do mapa. Os valores de Largura e Altura da imagem deve ser especificados em pixels. Layer (Linha 6) a palavra reservada LAYER inicia a declaração de um objeto layer. Na linha 16 a palavra END finaliza a declaração do objeto LAYER . Este objeto pode ser considerado o mais importante de qualquer MapFile, pois é através da declaração de layers é que se pode representar uma camada de informações geográficas. Os layers podem ser usados para a apresentação de mapas de pontos, linhas, polígonos, imagens( dados matriciais) ou apenas para exibição de objetos de textos( rótulos). Layer Um MapFile pode conter vários layers, sendo que o primeiro layer declarado aparecerá por baixo de todos os layers na visualização do mapa. E, sendo assim, por dedução, o último layer declarado aparecerá por cima de todos os layers no momento da visualização do mapa. NAME – Linha 7 a propriedade NAME define o nome do layer para a aplicação. Este nome deve ser uma string de no máximo 20 caracteres e não deve conter espaços ou acentos. O nome do layer é uma referência que permitirá à aplicação, dentre outras coisas, realizar operações como ligar ou desligar um layer, ou mesmo alterar propriedades e objetos de um dado layer. TYPE – Linha 8 A propriedade TYPE define o tipo de layer a representar. O tipo informado deve corresponder ao tipo dos dados a serem representados no referido layer. Por exemplo, para exibir um layer de polígonos defina o tipo como POLYGON, para um layer de linhas utilize LINE, para pontos use POINT e para dados matriciais use RASTER. DATA – Linha 9 A propriedade DATA define o nome do arquivo de dados geográficos a ser representado pelo layer. No caso de arquivos ShapeFile, apenas o nome do arquivo pode ser especificado, não havendo necessidade de especificar a extensão ".shp". No exemplo deste exercício, apenas o nome do arquivo foi informado, ou seja, não houve a necessidade de se informar o caminho completo do arquivo pois este já estava definido na propriedade SHAPEPATH. STATUS A propriedade STATUS quando definida como DEFAUT, informa ao MapServer que o referido layer sempre será desenhado. Independente do usuário solicitar ou não o desenho de um layer com STATUS DEFAULT, este sempre será desenhado. Outros valores possíveis para esta propriedade são ON e OFF, mas neste caso são usados pelo MapServer conforme o usuário solicitar ou não a ativação do layer na interface da aplicação. CLASS Linha 11: todo layer de representação vetorial deve possuir no mínimo 1( uma) classe. A palavra reservada CLASS indica o início da declaração da classe e na linha 15 a palavra END encerra a definição da classe. NAME / OUTLINECOLOR / COLOR Linha 12: a propriedade NAME de um objeto CLASS especifica o nome que aparecerá na legenda do mapa representando a referida classe. Caso não se especifique esta propriedade, então a classe não constará na legenda do mapa. Linha 13: a propriedade OUTLINECOLOR define, através de um código RGB( do inglês "red green blue"), a cor usada para o desenho da borda dos polígonos. Linha 14: a propriedade COLOR define a cor usada para o preenchimento dos polígonos. Acrescentando mais um Layer ... LAYER NAME "rvia" TYPE LINE DATA "sp_rvia" STATUS DEFAULT CLASS NAME "Rodovias" COLOR 255 128 0 END END ... http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio02.map&mode=map &layer=rvia Resultado A URL é praticamente idêntica à apresentada no exercício do capítulo anterior, exceto pelo fato de constar um novo parâmetro: layer: este parâmetro indica para o MapServer que o layer de nome rvia deve ser desenhado. O uso deste parâmetro foi necessário porque este novo layer, ao contrário do layer uf não está com STATUS definido para DEFAULT. Linha 19: O nome dado ao layer é o nome usado para a chamada deste layer na URL. O layer de rodovias foi declarado por último, ele aparece por cima Linha 20: como este é um layer de linhas, então o tipo especificado deve ser LINE. Linha 21: indica o nome do arquivo ShapeFile de rodovias. Linha 22: indica o início de uma classe. Esta classe será usada para representar as linhas. Linha 23: indica o nome que aparecerá na Legenda do mapa para esta classe. Para ter uma rápida idéia de como ficará a Legenda, execute o link abaixo: http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercic io02.map&mode=legend&layer=rvia Alterando a cor de fundo da imagem http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio02 .map&mode=map&layer=rvia&map_imagecolor=70+166+23 Neste link o parâmetro map_imagecolor na URL faz a modificação da cor de fundo da imagem do mapa, que por padrão é da cor branca( 255 255 255 ). Os sinais de "+" no código da cor representam os "espaços". Resultado Alterando o tipo de saída da imagem http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio02 .map&mode=map&layer=rvia&map_imagetype=pdf Neste exemplo a imagem de saída tem seu tipo alterado para PNG através do parâmetro map_imagetype.(gif, png, jpeg,wbmp, gtiff, swf, userdefined, pdf) NOTA: para que formatos de saída não comuns como SWF ou PDF sejam utilizados, é necessário que o MapServer tenha sido compilado com este recurso. Alterando várias opções ao mesmo tempo Neste exemplo além da cor de fundo e tipo de imagem, também foi alterado o tamanho da imagem através do parâmetro map_size. http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio02 .map&mode=map&layer=rvia&map_imagetype=jpeg&map_ size=600+450&map_imagecolor=70+166+239 Mapas Temáticos A criação de mapas temáticos no MapServer é ser feita através do uso de expressões. Pode-se utilizar expressões string de valor fixo, expressões regulares ou expressões lógicas. Criando temas com expressões string http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio04 _1.map&mode=map&layer=rvia Diferente dos exercícios anteriores, desta vez o layer de Rodovias foi separado em duas classes: Rodovia principal e Rodovia secundária. Observe que o símbolo "#" delimita o início de um comentário. Resultado Linha 20: A propriedade CLASSITEM define o nome do atributo (campo do DBF) no ShapeFile que será usado como campo de classificação para este layer. Linha 24: A propriedade EXPRESSION contém a expressão que será usada para a definição da classe. No caso da classe Rodovia principal, somente serão desenhadas, com a cor 255 128 0, as linhas que possuam o valor "SIM" no campo PRINCIPAL do shapefile. A string deve estar preferencialmente entre aspas duplas. Linha 31: A classe Rodovia secundária, somente serão desenhadas, com a cor 32 64 128, as linhas que possuam o valor "NAO" no campo PRINCIPAL do shapefile. Criando temas com expressões regulares http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio04 _2.map&mode=map&layer=muni Código LAYER END # Linha 16 NAME "muni" # Linha 17 TYPE POLYGON # Linha 18 DATA "sp_muni" # Linha 19 CLASSITEM "NOME" # Linha 20 CLASS # Linha 21 OUTLINECOLOR 0 0 0 # Linha 22 COLOR 255 32 32 # Linha 23 EXPRESSION /ARARAQUARA|SAO CARLOS|RIBEIRAO PRETO/ # Linha 2 END # Linha 25 # Linha 26 Neste exemplo, foi apresentado um novo layer( muni) que tem como base o shapefile sp_muni.shp (Linha 16). No caso, apenas três municípios deste layer foram desenhados. Linha 20: o campo NOME do shapefile sp_muni foi usado como classificador, através da propriedade CLASSITEM. Linha 24: As expressões regulares em objetos do tipo CLASS, devem ser definidas entre barras( / ). No caso da expressão regular definida nesta classe, serão desenhadas as cidades de "Araraquara OU São Carlos OU Ribeirão Preto". O caracter "|" simboliza o operador "OU" dentro da expressão regular. Para saber mais sobre expressões regulares, visite o link http://aurelio.net/er/ . Criando temas com expressões lógicas O uso de expressões lógicas para a definição de mapas temáticos no MapServer, é útil quando há a necessidade de se avaliar mais de um campo (atributo) de um dado layer. http://localhost/cgibin/mapserv.exe?map=C:\CAIO\curso\www\exercicio04 _3.map&mode=map&layer=muni& Não há a definição da propriedade CLASSITEM. Afinal, o uso de expressões lógicas para a criação de classes dispensa o CLASSITEM, pois a expressão lógica pode avaliar um ou mais atributos do layer. Linha 23: as expressões lógicas devem ser definida entre parênteses e podem conter operadores como >, >=, < ou <=. Os campos( atributos) deve ser definidos com seus nomes entre colchetes. Neste exemplo, esta classe vai desenhar apenas os municípios com população feminina (campo PSMULHERES) maior que a população masculina (campo PSHOMENS) Estrutura de uma aplicação Mapas (.shp, .shx, .dbf) MapFile (.map) Formulário de inicialização (.html) Arquivos Template (.html) MapFile WEB Inicia a declaração do objeto WEB. Este objeto é necessário quando se deseja definir uma interfacede usuário para a aplicação. IMAGEPATH "tmp/" Informa o caminho relativo ou absoluto do diretório onde serão geradas as imagens temporárias. Este diretório deve possuir permissões de escrita para o usuário do servidor web. IMAGEURL "/root/tmp/" Informa a URL que será usada para localizar as imagens temporárias. TEMPLATE "exercicio05_web_template.html" O arquivo Template do objeto WEB define o caminho relativo ou absoluto da página HTML que será usada como modelo para definição da interface da aplicação. Formulário de inicialização <html> <head><title>Learn2MapIt - Introdução ao MapServer Exercício 05</title></head> <body> <h4>Formulário de inicialização</h4> <form name="frm" method="get" action="/cgi-bin/mapserv.exe" > <input type="hidden" name="program" value="/cgi-bin/mapserv.exe" > <input type="hidden" name="map“ value="C:/caio/curso/www/exercicio05.map"> <input type="submit" value="Iniciar"> </form> </body> </html> Formulário de inicialização (2) O parâmetro action do formulário define o destino de envio dos dados do formulário. Ou seja, na prática é o endereço URL do MapServer CGI. O parâmetro program, aqui enviado na forma de um parâmetro oculto (hidden), tem o mesmo valor do item especificado no action e é necessário para que a aplicação funcione adequadamente após sua inicialização. O parâmetro map indica o MapFile que será processado pelo MapServer CGI Inicialização Após clicar no botão Iniciar os parâmetros contidos no formulário do arquivo exercicio05_iniciar.html (program e map) são enviados ao executável CGI do MapServer. Como não foi enviado o parâmetro mode, o MapServer é iniciado automaticamente com mode = browse. O modo browse é o modo de navegação por interface de usuário e assim sendo, o MapServer procurará pelo arquivo exercicio05_web_template.html que foi definido na propriedade TEMPLATE do objeto WEB MapFile exercicio05.map. Existindo o arquivo Template, o MapServer vai processar este arquivo, e substituir todas as palavras entre colchetes("[]" ) por valores especiais que serão preenchidos pelo MapServer. Processamento do arquivo Template Uma vez que o arquivo template exercicio05_web_template.html foi encontrado pelo MapServer, será realizada a substituição de valores definidos entre colchetes por valores gerados pelo MapServer em tempo de execução. Veja logo abaixo, uma lista das substituições realizadas no arquivo exercicio05_web_template.html: Define-se o action do formulário com o valor da variável [program]. Esta variável é enviada pela primeira vez através do formulário de inicialização (no arquivo exercicio05_iniciar.html ) e deve ser mantida através da declaração feita. Linha 8: Nesta linha tem-se a declaração de um objeto hidden que possui seu nome definido como "program" e seu valor será a substituição do texto "[program]" pela URL de endereço do MapServer CGI. Linha 9 Nesta linha tem-se a declaração de um objeto hidden, nomeado como "map" e seu valor será a substituição do texto "[map]" pelo caminho do MapFile. Linha 10: O parâmetro imgext é necessário para que a aplicação contenha a informação sobre qual o retângulo envolvente atual. Ou seja, toda vez que o MapServer é executado, ele precisa saber quais as coordenadas do retângulo envolvente que a aplicação está naquele momento. O valor "[mapext]" será substituído pelas coordenadas do retângulo envolvente corrente em cada interação com a aplicação. Linha 11: O parâmetro imgxy terá o seu valor substituído pela string "[ center ]". A palavra "[ center ]" calcula as coordenadas do centro da imagem em pixels. E o parâmetro imgxy com este valor servirá para *simular* um clique bem no centro da imagem quando o usuário clicar no botão Atualizar. Linha 12: O parâmetro zoomsize define o fator de zoom que será usado nas operações de aproximar (zoom in) e afastar (zoom out). Linha 14: Define o "mapa clicável" para a aplicação. O texto "[img]" será substituído pela URL da imagem temporária que foi gerada pelo MapServer. Em cada interação com a aplicação, o MapServer vai gerar uma imagem temporária dentro da pasta definida em MAP->WEB->IMAGEPATH, que será a imagem resultante da solicitação do usuário. Toda vez que o usuário clica sobre este mapa de navegação, são enviados para o MapServer CGI dois parâmetros essenciais para o correto funcionamento do sistema: img.x e img.y - estes parâmetros são as coordenadas (em pixels) do exato ponto clicado pelo usuário. Linhas 18, 19 e 20: Essas três linhas definem os controles de Zoom da aplicação. O parâmetro zoomdir pode assumir 3(três) valores: 1 para aproximar(zoom in), 0 para mover(pan) e -1 para afastar(zoom out). Os valores "[zoomdir_1_check]", "[zoomdir_0_check]" e "[zoomdir_1_check]" são processados pelo MapServer em cada interação e servem para deixar a última opção que o usuário escolheu já selecionada após o processamento da interação. Linhas 25 e 26: Estas linhas definem os controles de exibir/ocultar layers da aplicação. Se se ligar um destes layers e interagir na aplicação, após o processamento da solicitação poderá notar que o layer ligado anteriormente já aparecerá ligado na caixa de seleção. Isto ocorre através do processamento das variáveis "[rvia_check]" e "[muni_check]". Uma vez que o arquivo template é processado com as devidas substituições, o resultado é apresentado no navegador do usuário como uma página HTML. Para mais informações sobre os parâmetros usados em arquivos Template, "CGI Reference" http://mapserver.gis.umn.edu/docs/reference/cgi/referencemanual-all-pages "Template Reference". Simbologia de pontos Em aplicações MapServer é comum o uso de símbolos para a representação de feições, sejam estas do tipo pontos, linhas ou polígonos. Os símbolos podem ser usados na forma de vetores, caracteres especiais ou mesmo imagens. . . . SYMBOL # linha 8: inicia a declaração de um símbolo NAME "SYM_CIRCULO" # linha 9: nome do símbolo. TYPE ELLIPSE # linha 10: o tipo 'ELLIPSE' cria um símbolo em forma de elipse FILLED TRUE # linha 11: definindo FILLED como TRUE, o símbolo # será desenhado com preenchimento e não vazado POINTS # linha 12: para símbolos do tipo 'elipse', os pontos # aqui definidos representam os valores de raio(X,Y) da elipse 1 1 # linha 13: usando o mesmo valor para os raios X e Y de # uma elipse, cria-se um circulo END END . . . LAYER NAME sede" # linha 64: este é o layer das Sedes Municipais TYPE POINT # linha 65: o tipo do layer é de pontos DATA "sp_sede" # linha 66: nome do arquivo shapefile do layer das sedes CLASS NAME "Sedes municipais" COLOR 255 0 0 SYMBOL "SYM_CIRCULO" # linha 70: nome do símbolo( conforme # definido na linha 9) a ser usado para # representar o layer SIZE 3 # linha 71: tamanho do símbolo, em pixels END END Resultado Com o formulário de inicialização e o template. Usando imagens como símbolos SYMBOL NAME TYPE "SYM_PONTO" PIXMAP # símbolos de tipo PIXMAP são # símbolos definidos por uma imagem IMAGE "cidmun.png" # linha 20: caminho #relativo ou absoluto do arquivo #de imagem que será usado como símbolo END Adicionando uma legenda A Legenda é um componente essencial em qualquer mapa para auxiliar o usuário a interpretar os dados representados pelo mapa. Através da legenda o usuário poderá identificar e distinguir visualmente os diferentes elementos de dados representados no mapa. Analisando os arquivos (MAP File) LEGEND # linha 29: inicia a declaração da Legenda IMAGECOLOR 255 255 255 # linha 30: define a cor de # fundo da imagem da Legenda KEYSIZE 12 10 # linha 31: define as dimensões #(Largura x Altura) dos ícones das classes da # Legenda STATUS ON # linha 32: quando STATUS = ON, # a imagem temporária da legenda será criada. # Quando STATUS = EMBED, a imagem da legenda #será inserida na imagem do mapa END Analisando os arquivos (Template) <img src="[legend]" alt="Legenda"> Adicionando uma Barra de escala Apresentar o código do MAPFile e Template Exibindo rótulos Além de cores e simbologias, outro componente essencial para a interpretação de mapas são os rótulos ( textos). Os rótulos são textos que se posicionam sobre ou ao lado de feições geográficas para auxiliar o usuário na identificação de objetos. FontSet O MapServer possui o recurso de desenhar rótulos usando fontes bitmap ou fontes True Type. As fontes bitmap são a opção padrão do MapServer para o desenho de textos - como exemplo, observe os textos presentes nos objetos Legenda e Barra de escala. Usando fontes True Type é possível garantir aos textos um aspecto visual mais agradável que as fontes bitmap. E para utilização de fontes True Type, é necessário o uso de um arquivo FontSet. FontSet (2) O FontSet é um arquivo texto que contém uma lista das fontes True Type que poderão ser usadas por um dado MapFile. No conteúdo do arquivo FontSet cada linha deve conter: na primeira coluna, um nome para a fonte especificada; e na segunda coluna, o caminho( relativo ou absoluto) para o arquivo .ttf da referida fonte True Type. fontset.txt fte_fritqat fte_vera fritqat.ttf Vera.ttf Executando consultas Uma outra forma de se obter informações sobre um dado objeto geográfico em aplicações MapServer é através de seu modo de operação query, ou "consulta" em Português. Através de uma consulta, é possível exibir dados sobre um objeto geográfico selecionado pelo mapa de navegação. Fontes https://www.webmapit.com.br/ http://pt.wikipedia.org/wiki/Sistemas_de_Info rmação_Geográfica