SIG - Sistema de Informação Geográfica

imageUm SIG trata-se de um Sistema de Informação Geográfica, ou também Sistema de Informação Geoespacial.

Dois sistemas livres amplamente utilizados são o MapServer e o GeoServer. Conheço um pouco (bem pouco, na verdade) o MapServer e desconheço o outro. Minha intenção é documentar, nesta página, todo o processo para a instalação e configuração de ambos.

O MapServer é um WMS que roda como cgi, mas possui alguns módulos que dão suporte a algumas linguagens, como o PHP, e rodar diretamente do servidor Apache.

O GeoServer é uma aplicação java, que por esta razão necessita de um servidor de aplicações java para web. Além disso ele tem a possibilidade de, assim como o MapServer, obter dados a partir do PostGis

O PostgreSQL, ou postgres, é um banco relacional amplamente conhecido e utilizado. O PostGIS é um conjunto de extensões ao postgres que lhe confere a capacidade de realizar cálculos e armazenamento de informações georeferenciadas.

Ambientando-se

> ### Alguns acrônimos e definições

  • OGCOpen Geospatial Consortium – padroniza os tipos de dados utilizados pelos diversos SIGs;
  • WMS – Web Map Service – através de pedidos embutidos em requisições em URLs, um WMS deve prover: metadados sobre o próprio serviço, um mapa geográfico e, opcionalmente, informações sobre itens particulares no mapa;
  • WFS – Web Feature Service – descreve operações sobre dados geográficos e suas características (features, dados que podem ser gerados para se criar mapas geográficos);
  • WCS – Web Coverage Service – agregando os serviços acima, permite a busca e transformações sobre os dados obtidos em uma rede de aplicações geográficas distribuídas;
  • CS-W – Catalog Service Web – padroniza a interface utilizada para consultar os serviços supracitados;
  • SFS – Simple Features – SQL – define como digitalizar informações geográficos, geralmente em um banco de dados relacional (point, linestring, polygon etc.);
  • GML – Geography Markup Language – um XML para transporte de dados geográficos.
  • SRS – Spatial Reference System, no contexto da OGC, são codificados na sintaxe definida pela EPSG (European Petroleum Survey Group). O SRS padrão definido pela OGC é 4326 (WGS84, World Geodetic System, grau decimal).

Vamos agora criar um ambiente de avaliação e desenvolvimento de sistemas SIG dentro do Ubuntu. Primeiro devemos proceder com a instalação dos pacotes postgresql, postgis, postgresql-8.2-postgis, libpostgis-java, sun-java5-bin.

Entre os outros pacotes instalados automaticamente está o proj4, que reúne bibliotecas e programas de conversão de dados.

Bom, após a instalação do Java pode ser necessário configurar a máquina virtual java padrão do sistema. Isto é feito, no Ubuntu, através do comando update-java-alternatives.

### GeoServer

O Jetty é um servidor de aplicações java web escrito 100% em java. É conhecido por seu desempenho, em contraste com o ApacheTomcat. Uma opção para rodar o GeoServer é baixar o pacote binário e rodá-lo a partir do servidor Jetty embarcado no próprio GeoServer:

cd /opt
sudo unzip -xvzf geoserver--bin.zip
sudo exportJAVA_HOME=‘/usr/lib/jvm/java-1.5.0-sun’
sudo exportGEOSERVER_HOME=‘/opt/geoserver’
sudo $GEOSERVER_HOME/bin/startup.sh
Aponte seu navegador para http://localhost:8080/geoserver e poderá ver seu servidor GeoServer rodando. Para se entrar na área restrita o nome de usuário é admin e a senha é geoserver*.

Outra opção é pegar o pacote war e implantá-lo no ApacheTomcat. Com o Tomcat rodando, entre em sua interface de gerenciamento, provavelmente http://localhost:8180/manager para fazer o deploy. Talvez seja preciso editar as políticas de sistema para que tudo funcione, como pode ser visto no Southern Tip blog.

Caso você tenha shapefiles para testar, recomendo este tutorial.

PostGIS

PostGIS logoNo Ubuntu, após instalar o pacotes referentes ao PostgreSQL e ao PostGIS é preciso executar o seguinte procedimento para criar um template no postgres habilitado a executar funções SIG:

Entre como o usuário postgres:

sudo su - postgres

Crie um banco de dados. Coloque o sufixo template_ para facilitar tua vida:

createdb template_gis
Habilite a linguagem plpgsql para criação de stored procedures:

createlang plpgsql -d template_gis
Alimente o banco com as funções e tabelas de referência do sistema SIG (serão criadas várias funções e inserções no banco, aguarde):

psql templategis -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql
psql template
gis -f /usr/share/postgresql-8.2-postgis/spatialrefsys.sql
Entre no banco criado (isto abrirá um terminal de comandos do postgresql):

psql template_gis
Finalmente transforme o banco criado em um template:

UPDATE pgdatabase SET datistemplate=‘true’WHERE datname=‘templategis’;
Saia do terminal do postgres:

\q

A partir daí pode-se criar novo bancos SIG a partir do nosso template criado. Recomendo a utilização do pgAdmin III (pacote pgadmin3).

Atenção: caso ainda não tenha feito, é preciso criar uma senha para o usuário postgres no próprio banco de dados. Abra um terminal de comando do postgres:

sudo -u postgres psql template1
Altere a senha do usuário postgres:

ALTER USER postgres WITH PASSWORD ‘secret’;
\q
E se for necessário logar no postgres remotamente, isto é, via tcp/ip a partir de outra máquina (útil para separar o banco de dados da aplicação SIG), é preciso editar o arquivo /etc/postgresql/8.2/main/postgresql.conf:

#listenaddresses = 'localhost' listenaddresses = '*' #isto faz com que o postgres aceite conexões de outros endereços de rede

E o arquivo /etc/postgresql/8.2/main/pg_hba.conf:

#IPv4 local connections: #qualquer computador com endereço 192.168.0.* se conecta se tiver um usuário configurado no postgres host all all 192.168.0.0/24 md5

GeoServer: Configuração e testes

GeoServer
Para carregar shapefiles siga os passos contidos neste ótimo tutorial. Só houve um problema que ocorreu comigo foi do sistema não encontrar automaticamente o número EPSG (Wikipedia:EPSG). Tive de obter a listagem gerada pelo próprio GeoServer e buscar o número correspondente aos dados.

Shapefiles no PostGIS

Para carregar os shapefiles no postgis é preciso utilizar o programa shp2pgsql, instalado com os pacotes referentes ao postgis:

shp2pgsql -s SRID arquivo.shp nom_tabela > arquivo.sql
Onde SRID é um número que você deve encontrar da seguinte maneira:

  • Abra o arquivo .prj em um editor de texto. Você encontrará algo como:

PROJCS["SAD1969UTMZone23S",GEOGCS["GCSSouthAmerican1969",DATUM["DSouthAmerican1969",SPHEROID["GRS1967Truncated",6378160.0,298.25]] e UNIT["Degree",0.0174532925199433]

- Abra a ferramenta de consulta do PgAdmin III e entre com a seguitne consulta (pode demorar alguns segundos):

select srid, srtext, proj4text from spatialrefsys where srtext ILIKE '%SAD_1969%'

- Anote o srid (no caso 29193) da entrada mais próxima do esperado.

Referência: started with PostGIS http://www.bostongis.com/?contentname=postgistut01

Isto criará um arquivo de comandos SQL arquivo.sql. Tive outros problemas ao tentar executar os comandos contidos no arquivo SQL: ele não estava em utf8, e sim em latin1; e o usuário geo_user que criei não tinha as permissões necessárias para criar tabelas no banco.

Bom, como meu banco está em utf8 tive de converter o arquivo SQL com o seguinte comando:

iconv  -f latin1 -t utf8  -o arquivo.sql2  arquivo.sql
Quanto às permissões, é preciso conceder ao usuário em questão acesso à tabela geometrycolumns, pois ela controla as colunas com as geometrias (pontos, linhas, polígonos) das demais tabelas no banco em que se deseja guardar informações geográficas. Também é preciso conceder permissões sobre a tabela spatialref_sys, que possui os dados geográficos necessários para o funcionamento do SIG.

Após tudo acertado basta executar o seguinte comando para criar uma tabelas contendo os dados geográficos extraídos do shapefile:

psql -d geobdname -U geo_user -f arquivo.sql2
Para configurar o GeoServer siga os passos do seguinte tutorial.

Plugins para acesso a outras fontes de dados podem ser encontrados na página na sourceforge.

ArcSDE como fonte de dados

O ArcSDE é um sistema proprietário desenvolvido pela ESRI que efetua a conexão entre o sistema ArcGIS e diversos SGBDs. O GeoServer pode ser configurado para utilizar o ArcSDE como fonte de dados de suas requisiçõs.

Tutorial de como utilizar o plugin para conexão com o ArcSDE (note que o plugin não funciona no GeoServer 1.6 RC2 ou RC3.

Lembre-se de baixar o pacote com o patch da ESRI ArcSDE e colocar os todos os arquivos jar necessários (é só ver o tutorial) no diretório $GEOSERVERHOME/webapps/geoserver/WEBINF/lib/.

OpenLayers

Instalado o GeoServer é preciso pensar: como criar um aplicação PHP com ela? Ok, não é preciso pensar nisso, mas é o que estou me perguntando agora.

A interface com o usuário apresentada pelo GeoServer é baseada na biblioteca de OpenLayers, que se trata de uma biblioteca javascriptaberta e livre para criação de sistemas semelhantes ao Google Maps ou ao MS Live Earth.

A configuração e personalização do openlayers exige bastante programação javascript, por isso recomendo a utilização do plugin do Eclipse jseclipse.

Referências