Instalando banco de dados geográfico: PostGre SQL 8 e extensão geográfica PostGis 1.1

1. Introdução
Boa parte dos Sistemas de Informação Geográfica (SIG) desenvolvidos atualmente utilizam a arquitetura baseada em arquivos e diretórios, essa arquitetura dificulta a segurança, a administração, a atualização e o controle desses sistemas.

Com o crescimento contínuo do volume de informações e o desenvolvimento de sistemas distribuídos e em ambiente web, tem levado à utilização da tecnologia baseada em Banco de Dados Geográficos (BDG), apresentando-se como a melhor forma de desenvolver sistemas e administrar eficientemente, de maneira segura, um grande volume de dados geográficos.

Além das opções de BDG’s proprietários, como o Oracle Spatial, temos à disposição opções de código aberto, como o PostGre SQL (http://www.postgresql.org/) e sua extensão espacial PostGIS (http://postgis.refractions.net/). O PostGre é um Sistema Gerenciador de Bando Dados (SGBD) de código aberto que conta com recursos como: consultas complexas, chaves estrangeiras, integridade transacional, controle de concorrência, triggers, views, stored procedures, entre outros característicos de um SGBD maduro. Pelas suas características e potencialidades, tem sido amplamente aceito e empregado pela comunidade de desenvolvedores de sistemas que buscam por uma solução de código aberto (software livre). A extensão espacial PostGIS foi desenvolvida pela empresa Refractions e é licenciada livremente para a comunidade de software livre, essa extensão tem a função de permitir o armazenamento e tratamento
de dados geográficos no SGBD PostGre. O desenvolvimento da PostGIS obedece aos padrões OpenGIS (http://www.opengeospatial.org/), que consiste em um conjunto de padrões definidos por uma organização voluntária.

O uso do PostGre e sua extensão PostGIS, é uma solução de geoprocessamento robusta, com alta performance, baixo custo e que possibilita a integração com outros SIG’s que utilizam o padrão definido pelo consórcio OpenGIS.

2. Vantagens em utilizar o PostGIS
O PostGre SQL suporta geometrias espaciais, porém a extensão PostGIS adiciona entidades geográficas ao SGBD. Ou seja, o PostGIS adiciona a capacidade de armazenamento e recuperação de dados espaciais segundo a especificação Simple Features Specification (SFS) do consórcio internacional Open GeoSpatial (OGC).

Além do armazenamento de dados geográficos, este módulo também implementa diversas funcionalidades topológicas, possibilitando um desenvolvimento de SIG’s mais prático, garantindo ainda, interoperabilidade com outros sistemas computacionais que também adotam o SFS.

O PostGIS possui à disposição funções para análise espaciais/topológicas que estendem a funcionalidade do SGBD, através do próprio SQL. Entre as principais funções, pode-se destacar:

  • Disjoint: analisa se duas geometrias possuem algum ponto em comum e retorna o valor verdadeiro se algum ponto for identificado;
  • Intersects: analisa se duas geometrias possuem alguma interseção e retorna verdadeiro caso isso ocorra;
  • Touches: analisa se duas geometrias possuem alguma interseção e retorna verdadeiro caso isso ocorra;
  • Crosses: analisa se duas geometrias se cruzam e retorna verdadeiro caso isso ocorra;
  • Within: analisa se uma geometria está contida na outra e retorna verdadeiro caso isso ocorra;
  • Contains: analisa se uma geometria contém a outra e retorna verdadeiro caso isso ocorra.

Um exemplo de query SQL que utiliza uma dessas funções seria:

SELECT t2.nome munic FROM municipios t1, municipios t2 WHERE TOUCHES(t1.the geom, t2.the geom)=’true’ AND
t1.nome munic=’Cuiabá’;

No exemplo, ocorre uma seleção dos municípios que tocam a cidade “Cuiabá”.

3. A instalação
Este artigo irá descreve a instalação dos softwares em ambiente Linux, utilizando a distribuição Open Suse 11, sem o uso de repositórios. Portanto, essa descrição deve ser equivalente para outras distribuições baseadas em pacotes como o Fedora, CentOS, Mandriva, entre outros. Antes da instalação do SGBD PostGre e da extensão PostGIS é conveniente instalar algumas bibliotecas que são pré-requisitos para o correto funcionamento do sistema.

3.1 Projeções cartográficas
O processo de sistematicamente transformar partes da Terra, que possui forma esférica, para que sejam representadas em uma superfície plana mantendo as relações espaciais é chamado de Projeção Cartográfica.

Esse processo é obtido pelo uso de geometria e fórmulas matemáticas. A correspondência entre os pontos da superfície terrestre e a sua representação, constitui o problema fundamental da cartografia, pois impossibilita uma solução perfeita, ou seja, uma projeção livre de deformações.

Tentando minimizar as distorções, diferentes técnicas de representação são aplicadas no sentido de se alcançar resultados que  possuam propriedades favoráveis para um propósito específico, um exemplo de projeção seria o padrão UTM.

Para tratar essa questão, será utilizada a Cartographic Projections Library (http://www.remotesensing.org/proj/), uma biblioteca de
projeções cartográficas, necessária para que o BDG possa projetar corretamente em um mesmo mapa diferentes camadas de dados.

Para instalar a biblioteca, basta acessar o site do desenvolvedor baixar a última versão estável e proceder com a instalação. Neste artigo foi utilizada a versão compilada em pacote RPM e foi executado o comando (como root):

# rpm -ivh proj-xxxxxx.rpm

3.2 Análise espacial
Ao utilizar um BDG, um dos objetivos que se tem é ter a capacidade de realizar análises espaciais por meio do próprio banco de dados. Por exemplo, espera-se que seja possível determinar intersecções entre elementos espaciais de camadas diferentes, armazenadas no BDG. Um exemplo prático seria, efetuar uma consulta no banco buscando por todas as farmácias contidas no bairro Bosque. A resposta será o cruzamento entre as informações da área do bairro e dos pontos que correspondem a farmácias.

Há várias funções desse tipo e a biblioteca GEOS (http://geos.refractions.net/), além de ser compatível com o consórcio OpenGIS, implementa várias delas no PostGIS. Entre as funções disponíveis pode-se listar: crosses, touches, overlaps, relate, boundary, buffer.

Para instalar a biblioteca, basta acessar o site e baixar a última versão estável e proceder com a instalação. Para isso basta descompactar o arquivo de instalação e executar os comandos:

$ ./configure
$ make
# make install (como root)

3.3 Banco de dados PostGre SQL
Para instalar o banco de dados baixe a última versão estável disponível no site. Descompacte o arquivo com o comando:

$ tar -zxvf postgresql-xxxxxx.tar.gz

Execute o comando $./configure (no diretório onde o BD foi descompactado) e verifique se o comando é finalizado com sucesso, caso seja necessário resolva as dependências de bibliotecas. Na sequencia execute os comandos:

$ make (compila o código)
# make install (instala os arquivos do banco no sistema)
# adduser postgres (cria o usuário postgres)
# mkdir /usr/local/pgsql/data (cria o diretório onde os dados dos bancos de dados serão gravados)
# chown postgres /usr/local/pgsql/data (define como dono do diretório ‘‘data’’ o usuário postgres)
# su - postgres (loga como usuário postgres)
# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data (inicializa o diretório de dados)
# /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & (inicializa o banco de dados)

Para automatizar a inicialização do PostGre copie o script shell presente no diretório fonte do banco de dados a partir do caminho: ~/ postgresql-xxxxx/contrib/start-scripts/linux para o diretório /etc/init.d/postgresql. Configure o arquivo para permissão de execução com o comando: # chmod +x /etc/init.d/postgresql. Por fim, crie um link para o script no rc correspondente à inicialização do sistema, ou se preferir utilize o comando: updaterc.d postgresql defaults.

3.4 Extensão PostGIS
Para instalar a extensão PostGIS, baixe a última versão estável disponível no site. Descompacte o arquivo com o comando: $ tar -zxvf postgis-xxxxx.tar.gz

Lembre-se que o PostGre deve estar em execução, então, dentro do diretório onde o PostGIS foi descompactado execute os comandos:

$ ./configure
$ make
# make install

A extensão está instalada. O próximo passo é criar um banco de dados espacial.

4 Inicializando um BDG
Ao criar um banco de dados no PostGre é necessário habilita-lo para armazenar e consultar dados geográficos. É conveniente que seja criado um usuário com permissão de acesso aos dados geográficos:

# su postgres (loga como usuário do banco)
$ createuser usuariosig (cria usuário que terá permissão para acesso ao BDG)
$ createdb bdsig -U usuariosig (cria um banco de dados ‘‘bdsig’’ em que o proprietário seja o ‘‘usuáriosig’’)

Para permitir acentos use a codificação latina acrescentando ao comando de criação do banco o parâmetro: -E latin1.a

O banco de dados “bdsig” ainda não é capaz de tratar os dados geográficos, é necessário adicionar as funções do PostGIS ao banco:

$ createlang plpgsql bdsig (faz com que o banco seja capaz de interpretar a linguagem de programação PL SQL)
$ psql -f lwpostgis.sql -d bdsig (Carrega o conjunto de funções (stored procedures) programada no arquivo SQL para o banco)

O arquivo lwpostgis.sql está no diretório /usr/loca/pgsql/share/contrib. Após esses comandos, o banco está pronto para trabalhar com dados espaciais. Antes de utilizar o banco, é recomendável utilizar o comando: $ vacuumdb -z bdsig. Este comando é responsável por “limpar” e analisar uma base de dados no PostGre, a opçãao -z executa uma função de otimização que irá acelerar as consultas na base de dados.

Resta como próxima etapa, fazer uso do BDG.

5 Carregando dados geográficos no BDG
Para carregar os dados de um shape no PostGIS deverá ser utilizado o aplicativo shp2pgsql, este aplicativo é responsável por interpretar os dados de um shape, gerar a estrutura da tabela no banco e efetuar a inserção dos registros na tabela. Para obter maiores detalhes das funções deste aplicativo, execute o comando com o parâmetro de ajuda: $ shp2pgsql --help.

Para inserir um shape há dois métodos, o primeiro executa a inserção diretamente no banco e o segundo gera um arquivo SQL, que a partir dele insere os dados no banco de dados. Apesar do segundo método parecer inicialmente menos eficiente ele é interessante pois possibilita verificar o código SQL que será executado, permitindo uma revisão e análise.

Para inserir os dados direto no banco de dados, podemos utilizar o comando:

$ shp2pgsql -c shp_bairros bairros | psql -d bdsig -U usuariosig

No comando acima, o aplicativo shp2pgsql gera a tabela “bairros” a partir do shape “shp_bairros”, o resultado desse processamento será repassado ao aplicativo psql que acessa o banco “bdsig” utilizando o usuário “usuariosig”.

Na inserção com a geração do arquivo SQL, os comandos a serem utilizados são:

$ shp2pgsql -c -D shp_bairros bairros > arquivo.sql
$ psql -d bdsig -U usuariosig -f arquivo.sql

No comando acima, o processamento do comando shp2pgsql é armazenado em arquivo, que pode ser visualizado com qualquer editor de texto. Na sequencia, o arquivo é carregado para o banco “bdsig” com acesso por meio do usuário “usuariosig”.

6 Acessando os dados no PostGIS
Nesse ponto, os dados já estão armazenados no banco de dados e podem ser acessados por qualquer aplicativo SIG que possa se conectar ao banco. Por exemplo, pode ser utilizado o aplicativo UDIG (http://udig.refractions.net/) ou o QuantumSIG (http://www.qgis.org/), ambos possuem a funcionalidade de se conectar ao PostGIS.

7 Referências Bibliográficas

  • UCHOA, H.N., COUTINHO, R.J.C, FERREIRA, P.R., COELHO FILHO, L.C.T., BRITO, J.L.N.S., Análise do módulo PostGis para armazenamento e tratamento de dados geográficos com alta performance e baixo custo, OpenGeo. Disponível em  http://www.opengeo.com.br.

About Ivairton Santos

Professor no curso de Ciência da Computação na Universidade Federal de Mato Grosso. View all posts by Ivairton Santos

Leave a comment