Sexta-feira, Setembro 25, 2009

Corrigindo a Codificação na Exportação de Shapefiles para SQL

No processo de exportação de Shapefiles para SQL já podemos modificar a codificação do arquivo gerado para a mesma codificação do Banco, evitando a inserção de caracteres estranhos nas tabelas (�). Também é comum nos depararmos com o erro abaixo quando tentamos importar um arquivo .sql na codificação LATIN1 (ou ISO-8859-1) para um Banco de Dados em UTF-8:

ERRO:  sequência de bytes é inválida para codificação "UTF8": 0xed7269
HINT:  Este erro pode acontecer também se a sequência de bytes não corresponde a codificação esperado pelo servidor, que é controlada por "client_encoding".


Para evitar este problema, use o comando shp2psql junto com o comando iconv, que é responsável por fazer esta modificação. A sintaxe é a seguinte:


shp2pgsql -s SRID shapefile nome_da_tabela | iconv  -f codificacao_de_origem -t codificacao_de_destino > arquivo_sql.sql


Exemplo:

shp2pgsql -s 4291 municipios_ibge.shp municipios | iconv -f LATIN1 -t UTF-8 > municipios.sql  

Em seguida, use psql -f municipios.sql -d seu_banco_utf8 para criar a tabela com seus registros.

Quinta-feira, Setembro 17, 2009

Utilizando Javascript e CSS em aplicações Mapserver via CGI

Para finalizar a postagem “Integrando o Mapserver com o PostGIS” vou disponibilizar aqui  uma aplicação Mapserver CGI que utiliza algumas funções Javascript em um layout baseado em CSS (Cascading Style Sheets – CSS). 

Esta aplicação também roda no Windows através do pacote MS4W. Veja como configurá-la através do arquivo como_instalar.txt.






Fico a disposição de vocês caso haja alguma dúvida sobre o código.

Terça-feira, Fevereiro 03, 2009

Sistema de Informações dos Recursos Hídricos do Ceará

Depois de um bom tempo sem postar, resolvi comentar uma consultoria que realizei recentemente para a Secretaria de Recursos Hídricos do Ceará, utilizando as seguintes tecnologias: PHP, Linux (Fedora), PostgreSQL/PostGIS, Mapserver e o Framework Pmapper.

Realmente foi um desafio desenvolver este projeto em tão pouco tempo (cerca de dois meses e meio). Tivemos que migrar e remodelar a base de dados que estava no Microsoft SQL Server para o PostgreSQL, já a base de dados espaciais estava em Shapefile e também foi exportada para o Banco através da extensão espacial PostGIS. Só a tabela de poços possuía mais de 16 mil registros!

O esforço valeu a pena! aprendi muito neste trabalho e acredito que o resultado ficou a contento da SRH, que venham os novos desafios!!!






















http://atlas.srh.ce.gov.br/

Domingo, Março 02, 2008

Integrando o Mapserver com o PostGIS

Com base nos posts anteriores (1 e 2) podemos criar uma aplicação Webmapping que utilize dados armazenados em um BDE. Para este primeiro tutorial, os dados utilizados estão disponíveis neste link.

1. Carregando os sripts SQL no BDE.

No terminal, navegue até a pasta onde você salvou e descompactou os arquivos e digite: psql -f lotes.sql -d gis (enter), em seguida digite novamente psql -f vias.sql -d gis (enter), desta forma você criará duas tabelas no Banco, lotes e vias.


2. Criando o arquivo Mapfile:

Abra um editor de texto qualquer e digite o seguit
e conteúdo:

MAP
NAME 'Mapa 1'
SIZE 600 400
EXTENT 295090 9211971 296291 9212708

UNITS meters
IMAGECOLOR 247 247 247

LAYER
NAME 'lotes'

STATUS Default

TYPE Polygon
CONNECTIONTYPE postgis
CONNECTION "dbname=geo user=postgres host=localhost password=postgres"
DATA "the_geom FROM lotes USING UNIQUE gid USING SRID=29185"
CLASS
NAME 'lotes'
STYLE
COLOR 255 234 190
OUTLINECOLOR 0 0 0

END #style

END #class
END #layer

END #Fim do Mapfile



Salve este arquivo como postgis.map em seguida feche-o.

3. Visualizando o mapa de forma estática

Abra Browser e digite: http://localhost/cgi-bin/mapserv?map=/var/www/postgis.map&mode=map

Como resultado será exibido o mapa da figura abaixo:



4. Adicionando a camada vias, diferenciado-a por tipo de pavimento

Altere o Mapfile, adicionando as linhas mostradas em vermelho, a seguir:

MAP

NAME 'CTM'
SIZE 600 400
EXTENT 295090 9211971 296291 9212708
UNITS meters
IMAGECOLOR 247 247 247

# Símbolo criado para mudar a espessura dos arcos (camada vias)
SYMBOL
NAME 'linha'
TYPE ELLIPSE
POINTS
1 1
END
END


LAYER
NAME 'lotes'
STATUS Default
TYPE Polygon
CONNECTIONTYPE postgis
CONNECTION 'dbname=gis user=marcello host=localhost password=x'
DATA 'the_geom FROM lotes'
CLASS
NAME 'lotes'
STYLE
COLOR 255 234 190
OUTLINECOLOR 0 0 0
END #style
END #class
END #lotes

#Aqui começa o segundo layer
LAYER
NAME 'vias'
STATUS Default
TYPE Line
CONNECTIONTYPE postgis
CONNECTION "dbname=gis user=marcello host=localhost password=x"
DATA "the_geom FROM vias USING UNIQUE gid USING SRID=29185"

CLASSITEM 'pavimentac'

CLASS
NAME 'Asfalto'
EXPRESSION 'Asfalto'
STYLE
SYMBOL linha
SIZE 3
COLOR 168 0 0
END #style
END #class

CLASS
NAME 'Paralelepípedo'
EXPRESSION 'Paralelepípedo'
STYLE
SYMBOL linha
SIZE 2
COLOR 0 38 115
END #style
END #class

CLASS
NAME 'Solo'
EXPRESSION 'Solo'
STYLE
SYMBOL linha
SIZE 1
COLOR 255 85 0
END #style
END #class

END #vias

END #Fim do Mapfile


Abra o browser novamente, digite a mesma URL anterior e observe a nova camada criada:

Quinta-feira, Setembro 27, 2007

Utilização do Mapserver no gerenciamento dos Recursos Hídricos do Estado da Paraíba

1. Introdução

A escassez da oferta hídrica é um dos problemas mais graves enfrentados a nível mundial. Na região nordeste do Brasil, este problema se agrava em função da variação climática, do crescimento da demanda e dos usos múltiplos da água, além da má distribuição dos Recursos hídricos no espaço e no tempo.

A Agência Executiva de Gestão das Águas do Estado da Paraíba (AESA) tem como principal atribuição, gerenciar com racionalidade os recursos hídricos do Estado, assegurando as demandas dos usuários, fazendo uso dos instrumentos das leis federal e estadual, resguardando o meio ambiente e o bem estar do homem, de forma a garantir o desenvolvimento sustentável.

Como ferramenta de apoio à tomada de decisão, os Sistemas de Informações Geográficas (SIG), possibilitam aos gestores uma série de funcionalidades que contribuem diretamente em um melhor gerenciamento dos recursos hídricos. Através do SIG é possível gerar mapas e cartas que mostrem, por exemplo, quais áreas estão desabastecidas, ou onde estão as localidades que necessitam de uma maior oferta hídrica, e a partir daí, realizar análises espaciais e estatísticas visando amenizar tais problemas.

No entanto, o usuário final deve ter acesso às informações processadas de um SIG de uma forma rápida e fácil em uma interface amigável. Neste contexto, os programas de Webmapping disponibilizam dados espaciais na Web, permitindo que qualquer pessoa, através de um navegador (browser), possa interagir com mapas dinâmicos através de comandos como zoom, pan, realizar consultas, além criar mapas temáticos e relatórios.

Com o objetivo de possibilitar ao visitante do Portal AESA acesso de forma rápida e fácil a diversas informações georreferenciadas do Estado, foi desenvolvida uma aplicação Webmapping utilizando Mapserver e o framework Pmapper. Através da interface deste aplicativo, batizado de SIGAESA-WEB qualquer pessoa pode consultar informações sobre bacias hidrográficas, sistemas aqüíferos, pluviometria média, adutoras, além das informações qualitativas e quantitativas sobre os rios e açudes, dentre outros níveis de informação.

2. Tecnologias Utilizadas

A base cartográfica disponibilizada pelo aplicativo é composta de elementos que foram obtidos junto ao IBGE, tais como: limites estaduais, divisão municipal e sedes municipais. Outras feições como, rios, açudes, bacias hidrográficas, postos fluviométricos, dentre outros, foram confeccionados na própria agência através de técnicas de digitalização e de classificação de imagens de satélite, utilizando imagens CBERS 2 CCD (2006), LANDSAT 7 (2006) e SRTM (2006).

Já os programas utilizados foram os seguintes:
  • Sistema operacional: Linux Fedora Core 7;
  • servidor Apache com PHP;
  • editor Web: NVU;
  • editor de arquivos Mapfile: Scite;
  • Banco de Dados: PostgreSQL/PostGIS;
  • Pmapper v.3.1
3. Implementação do Sistema

A configuração do aplicativo iniciou-se com a instalação e configuração do servidor Apache com o PHP no Fedora, em seguida foram instalados a partir dos fontes as seguintes bibliotecas: proj, gd, libpng, libgeotiff, zlib, geos, postgresql, postgis, gdal e o mapserver, a medida que eram requeridas algumas dependências destas bibliotecas no processo de compilação, outros pacotes também foram baixados e instalados utilizando o comando yum, presente nesta distro.

O próximo passo foi exportar as feições geográficas que estavam no formato shapefile para o Banco de Dados Espaciais, tal procedimento foi realizado através do comando shp2pgsql, que gera um script SQL a partir da leitura dos arquivos shapes. Em seguida entrou em cena a configuração do pmapper, que é um framework de fácil configuração, já que para colocarmos a aplicação para “rodar”, necessitamos apenas criar o arquivo mapfile, o qual define a forma como os níveis de informação serão exibidos, e em seguida configurar a aplicação através dos arquivos de configuração do próprio pmapper. O tempo total gasto durante todo este processo, se somarmos a isso a customização do pmapper, foi de aproximadamente 70 horas de trabalho.

A figura 1 mostra o esquema de funcionamento do aplicativo SIGAESA-WEB.


Figura 1 – Esquema do funcionamento do aplicativo SIGAESA-WEB


4. Resultados

Através da interface do aplicativo, qualquer usuário tem acesso imediato a uma série de informações, dentre as quais destacam-se o monitoramento diário do volume dos açudes (figura 2).

Figura 2 – Consulta ao volume de um açude

Estão também disponíveis dados sobre a qualidade da água dos rios e açudes monitorados pela Superintendência de Administração do Meio Ambiente do Estado – SUDEMA (figura 3).

Figura 3 – Consulta à qualidade da água de um rio

5. Conclusões

Antes da disponibilização deste aplicativo Webmapping no portal da AESA, não havia oportunidades de análise e identificação dos problemas hídricos pela população em geral. Porém após sua implementação, observou-se um crescente interesse da sociedade e também de outros órgãos do estado por tais informações, que antes estavam disponíveis apenas para os técnicos da agência, ou a pesquisadores e estudantes que tinham que se deslocar até a mesma. Desta forma o aplicativo também contribuiu para diminuir a burocracia de acesso a essas informações.

Do ponto de vista financeiro, a solução adotada utilizou apenas softwares livres, proporcionando uma grande economia na aquisição das licenças de programas proprietários similares.

O SIGAESA-WEB destacou-se como uma ferramenta de fácil manuseio, e alcançou seu principal objetivo, que é o de disseminar informações espaciais na Web para a sociedade de forma mais fácil e rápida, tanto para os gestores quanto para a sociedade como um todo.

Como trabalho futuro, deseja-se incluir no aplicativo os pontos outorgados e cadastrados dos usuários de recursos hídricos do estado.

Por fim, a AESA espera tornar-se em alguns anos um modelo regional na gestão de recursos hídricos através de ações que possibilitem avançar em torno do desenvolvimento sustentável e da gestão participativa.

Site do SIGAESA-WEB: http://www.aesa.pb.gov.br/geoprocessamento/

Criando uma aplicação Webmapping com o Alov map

O Alov map é um publicador de mapas gratuito, desenvolvido através da linguagem Java que pode ser implementado na forma de applet ou servlet. Na versão servlet os dados ficam armazenados em um SGBD e são enviados ao cliente de forma incremental, através do botão de “ligar/desligar camada”, já na versão applet, todos os dados são enviados ao cliente no momento em que a página é carregada no browser.

Embora a versão servlet seja mais flexível, neste tutorial vamos trabalhar inicialmente na versão applet deste programa, que é bem mais fácil de configurar para usuários iniciantes. Mais detalhes sobre o alov podem ser encontrados no site
http://alov.org

Para visualizar a página que será criada neste tutorial é necessário que você tenha a máquina virtual Java (JVM), ou o JRE instalados no seu computador.

1o Passo – Download do Alov Map:

Para baixar o Alov é necessário que o usuário faça um registro na página de downloads do site, após este registro, baixe a versão applet do programa, como mostra a figura 1 abaixo:

Figura 1 – baixando a versão Applet.

Os dados deste tutorial podem ser baixados no site: http://geo.marcello.googlepages.com/municipios.zip

2oPasso – Preparando a aplicação:

Coloque os arquivos baixados em uma mesma pasta de sua escolha, não é necessário descompactar o arquivo shapefile zipado (municipios.zip). A seguir vamos criar dois arquivos para que o aplicativo funcione, um no formato XML e outro no formato HTML.

3o Passo – Criando o arquivo XML de configuração dos layers:

Neste arquivo iremos definir a forma na qual os dados serão apresentados no Alov, à medida que fomos passando para os outros tutoriais, este arquivo irá sendo alterado de forma gradativa. Através de um editor de texto de sua escolha, crie um arquivo chamado config.xml com o conteúdo abaixo:

<?xml version="1.0" encoding="ISO-8859-1"?>
<project zoomunits="km" mapunits="degrees">
<layer name="Municipios" visible="yes" showlegend="yes">
<dataset url="municipios.zip" />
<renderer>
<symbol fill="211:255:190" outline="38:115:0" />
</renderer>
</layer>
</project>

Explicando...

A linha 1 indica que este arquivo é um XML, e qual é a sua codificação.

Na linha 2 inicia-se a tag projeto, todos os dados que serão mostrados no aplicativo devem ser declarados em algum lugar dentro do projeto, também foram definidos dois atributos para essa tag, um indicando que as unidades de zoom estão em quilômetros (zoomunits="km") e outro indicando que as unidades do mapa estão em graus decimais (mapunits="degrees"). A linha 9 fecha o projeto iniciado na linha 2.

Na linha 3 inicia-se um layer, onde o seu nome foi definido como municípios (name="Municipios"), que estará visível quando o Alov for inicializado (visible="yes") e terá uma legenda mostrando a sua cor e/ou símbolos utilizados (showlegend="yes"). A linha 8 indica o final da definição do layer.

Na linha 4 é definido o local e nome do arquivo shapefile desta camada (url="municipios.zip"), observe que não é necessário descompactá-lo, já que o Alov é capaz de ler arquivos no formato zip.

A linha 5 inicia a tag renderer onde dentro dela, definiremos a aparência do layer através da tag symbol. Os atributos fill e outline definem respectivamente as cores de preenchimento e da cor da borda do polígono na escala RGB. A linha 8 fecha a tag renderer.

4o Passo – Criando o arquivo HTML:

No arquivo HTML será colocado a diretiva applet, responsável por carregar a janela do aplicativo. Para isso, crie um arquivo chamado mapa.html com o conteúdo abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Webmapping</title>
</head>
<body>
<applet codebase ="."
code="org.alov.viewer.SarApplet"
archive="alov_applet.jar"
width="650" height="400" align="center">
<param name="pid" value="config.xml">
</applet>
</body>
</html>

Explicando...

As linhas 1 e 2 indicam o doctype do arquivo HTML, a linha 3 inicia a tag html com o atributo namespace e a linha 16 fecha o tag html.

A linha 4 inicia a tag do cabeçalho (head), onde é definido o título do documento através da tag title, na linha 6. A linha 7 fecha a tag head.

O conteúdo da página é definido dentro do corpo (body), ou seja, entre as linhas 8 e 15.

A linha 9 inicia a tag applet, indicando que o arquivo alov_applet.jar está na mesma pasta em que o HTML se encontra (codebase =”.”), em seguida são informados o nome da classe java (linha 10) e o nome do arquivo que deve ser carregado (linha 11).

Na linha 12 são passados os parâmetros de largura, altura e alinhamento da janela do applet.

Por fim, na linha 13 temos a tag param, que informa o nome do applet (name=”pid”) e o nome do arquivo XML (value=”config.xml”), já a linha 14 fecha a tag applet.

5o Passo – Visualizando a aplicação:

Abra o arquivo mapa.html e veja como ficou sua primeira aplicação Alov Map, se não aparecer a página mostrada abaixo, verifique se não há algum erro no seu código, ou se a máquina virtual Java não está instalada no seu computador. No próximo post veremos como construir alguns mapas temáticos e como habilitar o modo de consulta por atributos. Um Abraço!

Sexta-feira, Março 09, 2007

Instalando o Mapserver com PHP Mapscript no Ubuntu 6.10

Umas das formas mais fáceis de se instalar o Mapserver no Ubuntu é através do gerenciador de pacotes synaptic, neste tutorial vamos ver que este processo, ao contrário do que muita gente acha, é bastante simples.

1. Instalando o Apache com PHP
No Gnome, clique em Sistema > Administração > Gerenciador de Pacotes Synaptic. Clique em procurar e digite apache, selecione os pacotes: apache2, apache2-common, apache2-doc. Clique em aplicar, e em aplicar novamente. Aguarde o download dos pacotes e a instalação. Repita o procedimento para instalar o PHP, escolhendo os pacotes: php5, libapache2-mod-php5, php5-cgi e php5-common.

2. Instalando o Mapserver com PHP mapscript
Ainda no Synaptic, clique em procurar e digite mapserver, selecione os seguintes pacotes para instalação: cgi-mapserver, mapserver-bin, mapserver-doc e php5-mapscript. Reinicie o servidor apache digitando no Terminal sudo /etc/init.d/apache2 restart .

Mude as permissões para a pasta onde serão armazenadas as páginas a serem criadas, digitando no Terminal sudo chmod 775 /var/www (enter).

3. Verificando a Instalação
Abra o seu navegador e digite: http://localhost/cgi-bin/mapserv, você verá uma página em branco com a seguinte mensagem:

No query information to decode. QUERY_STRING is set, but empty.

Isto indica que o mapserver foi instalado corretamente. Vamos agora verificar se o módulo PHP Mapscript também está OK, abra um editor de texto qualquer (gedit, VI, etc.) e digite o seguinte conteúdo:
<?php
phpinfo();
?>

Salve este arquivo em /var/www com o nome phpinfo.php. Para finalizar, digite no navegador http://localhost/phpinfo.php , ao carregar a página, procure pelo quadro mostrado na figura abaixo, contendo as informações sobre o módulo Mapscript.

No próximo post, vou mostrar como criar uma aplicação com Mapserver e PostGIS. Até lá!

Terça-feira, Março 06, 2007

Usando o Postgis com o Quantum Gis no Ubuntu

Dando seqüência ao último post, vamos agora importar um arquivo shapefile contendo o mapa do Brasil para o nosso BDG, depois iremos visualizar esta tabela no QGIS. Para este tutorial faça o download do arquivo que se encontra no link abaixo:

http://www.gismaps.com.br/divpol/divisao_politica.zip

Após baixar o arquivo, é só descompactá-lo
em um diretório da sua escolha.

1. Utilizando o comando shp2pgsql para converter os shapes

No Terminal, vá até a pasta em que você salvou o arquivo e depois digite shp2pgsql -s 4291 BRASIL.shp estados_br > estados_br.sql (enter)
Onde:

-s 4291 indica o SRID (Identificação do Sistema de Referência Espacial) referente ao Datum SAD69 e as coordenadas geográficas.
BRASIL.shp é o nome do arquivo shapefile que iremos converter em sql.
estados_br é o nome da tabela que será criada no banco.
estados_br.sql é o nome do arquivo sql a ser gerado neste mesmo diretório.

Se você não errou nada, verá a mensagem abaixo, indicando que o arquivo sql foi criado.
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]

Criado o arquivo estados.sql, vamos importá-lo para o banco, digite psql -f estados_br.sql -d gis (enter).

2. Vizualizando a tabela no QGIS

Baixe e instale o QGIS pelo synaptic, após sua instalação, abra-o, e vá até o ícone Add a PostGIS Layer. Agora clique em novo e informe os parâmetros da conexão, como mostra a figura abaixo:



Clique agora em conectar, escolha a tabela e clique em adicionar para visualizar o mapa do Brasil, como mostra a figura abaixo: