Blog Geo.NET Geoprocessamento, SIG e Sensoriamento Remoto

31Jul/102

PostGIS WKT Raster

Buenas pessoal,

Como estão as coisas? Hoje vamos conversar um pouquinho sobre o WKT Raster.

O WKT Raster é um projeto para implementar suporte aos famosos grids, rasters, imagens ao PostGIS. WKT vem de Well Known Text (algo como "texto bem conhecido").

O projeto já tem código compilado e funcionando e tomei a semana para testá-lo de acordo. A implementação veio da especificação desenvolvida por Pierre Racine. O projeto tem como objetivo integrar-se perfeitamente ao engine do PostGIS já existente, sendo possível executar operações espaciais / álgebra de mapas, carregar rasters multi-bandas, entre outras coisas deliciosas.

Este projeto é muito interessante, pois podemos armazenar os rasters dentro do banco de dados, garantindo ou excluindo acesso à quem realmente precisa, ao invés de ficarmos com milhares de cópias por aí (imagine um escritório com 20 analistas GIS - qual é quantidade de informações duplicadas), sem saber ao certo qual é a mais atual ou com melhor qualidade - enfim, nos garante todas as vantagens do armazenamento centralizado em banco de dados. Não necessariamente precisamos armazenar os dados no PostgreSQL, podemos deixá-los em HD e adicionar somente os metadados e acessá-los da mesma forma, caso você esteja preocupado com disco ;) . Em suma, é demais!

Vamos comentar com instalar essa belezinha no seu PostgreSQL - em Windows XP. Linux users, sorry.

Pré-requisitos

Sempre existem né?

  • PostgreSQL/PostGIS instalado. O PostGIS deve 1.4 ou maior, determinando também a versão do PostgreSQL: 8.3 ou maior;
  • Python;
  • GDAL/python;
  • WKT Raster;

Instalação

1) Instale o Python, 2.5 ou 2.6. Estou usando o 2.5, que foi instalado junto com o ArcGIS. Portanto, se você tem esta instação específica, não se preocupe. Esta instalação é bem simples. Dois cliques, pá pum, está instalado.

2) Instale os GDAL bindings. Para fazer isso é só descompactar a pasta zipada e colocá-la no diretório que mais lhe agradar. Coloquei a minha pasta (gdalwin32-1.6) no diretório C:.

2.1) Vá em Painel de Controle > Sistema > Avançado > Variáveis de Ambiente. Procure a variável PATH. Ela é composta de vários diretórios separados por um ponto-e-vírgula, correto? Adicione o diretório C:gdalwin32-1.6bin nesta listinha e adicione um ; no final. Claro, se você pos a pasta do gdal em outro diretório, faça as alterações pertinentes.

2.2 ) Ainda em variáveis de ambiente, adicione uma nova variável, chamada GDAL_DATA e adicione o caminho C:gdalwin32-1.6data como caminho. Como esta variável de ambiente é usada somente pelo GDAL, não se preocupe em colocar o ;. Mas se colocar também não faz mal. Dê OK para salvar as variáveis de ambiente. Os bindings do GDAL para Python já estão instalados. Você pode acessá-los e utilizar o GDAL para um monte de coisas, como converter coordenadas de rasters, reprojetá-los, etc. tudo usando uma linha de comando.

3) Descompacte o pacote do WKT Raster.

3.1) Copie o arquivo rtpostgis.dll para a pasta lib do PostgreSQL. Geralmente é algo como C:Program FilesPostgreSQL8.xlib;

3.2) Copie os arquivos gdal2wktraster.py e libgdal.dll para a pasta bin da sua instalação do PostgreSQL. Fácil né?

3.3) Vamos instalar os comandos e funções do Wkt Raster no nosso banco agora. Abra o PgAdmin3 ou o console sql do Postgres e conecte-se ao banco de dados alvo. Feito isso, rode os comandos que se encontram na pasta sharecontrib do pacote WktRaster. Feito isso, teste se o WKT Raster está funcionando apropriadamente usando o comando SQL:

SELECT postgis_raster_lib_build_date(),postgis_raster_lib_version();

Caso o comando tenha sucesso, tudo foi instalado com sucesso.

A instalação termina aqui. Mas como carregar um raster para dentro de nosso banco de dados? Podemos utilizar a ferramenta em Python desenvolvida para este propósito, o script gdal2wktraster.py

Carregar um raster para o banco de dados

Esta ferramenta é uma aplicação em linha de comando, bastante fácil de utilizar. O resultado dela é um script .sql que você pode rodar pelo console sql ou pelo PgAdmin3.

Abra um console DOS e digite:

python "CaminhoParaOArquivogdal2wktraster.py" --help

Isto lhe deve dar todas as opções da ferramenta.

Algumas:

  • -t nome da tabela à ser criada no PostGIS, e.g. -t teste_raster;
  • -o nome do arquivo de saída, e.g. -o srtm.sql;
  • -k especifica o tamanho tile. Esta opção é muito importante, pois divide seu raster original em diversos registros cada um com este tamanho, em pixels. e.g. -k 90x90; Caso você não utilize esta opção, seu raster original ocupará apenas um único registro da tabela. Se você utilizá-la, você diz ao PostGIS: pegue este raster, fatie-o em pedaços de tal tamanho e insira-os nesta tabela!
  • -f especifica o nome da coluna do tipo raster. e.g. -f grid;
  • -r esta é a opção mais importante de todas, com ela especificamos o arquivo original à ser carregado. e.g. -r "CaminhoDoArquivoRasterarquivo.tif";

Exemplo de um comando completo

C:Python25python.exe "C:Program FilesPostgreSQL8.3bingdal2wktraster.py" - r "C:srtm.tif" -k 90x90 -f grid -t srtm -o srtm.sql

Esta ferramenta é bem fácil de utilizar e gera um SQL limpinho, só faltando rodá-lo dentro do banco de dados.

Estou desenvolvendo algumas ferramentinhas de análise espacial, em especial ferramentas para extração automática de feições - algumas já estão prontas, outras ainda no forno, mas logo logo falo sobre elas! Esta é a página oficial do WKT Raster.

O que acharam?

Abraços!

George R. C. Silva

Related posts:

  1. Construindo funcionalidades para o WKT Raster
  2. #Python – pt4
  3. #Python – pt2
  4. #Python – pt3
  5. Python QuantumGIS Cookbook
Comments (2) Trackbacks (1)
  1. Oi George.

    O WKTRaster vai ser uma bomba. Podes dizer como se faz para construir um mosaico dentro do PostGIS a partir de várias imagens no disco? E como se mantém a performance com pirâmides? Podemos actualizar parte do mosaico, por exemplo com uma nova imagem adicional?

    Abraço,
    Duarte

  2. Olá Duarte, tudo bom? Primeiro, obrigado pelo comentário.

    A ferramenta gdal2wktraster pode carregar diversos rasters de uma única vez utilizando os caracteres curinga disponívels (* e ? se não me engano) – que devem funcionar como um curinga greedy e um curinga local, respectivamente.

    Algo como gdal2wktraster -r srtm0?.tif – deveria carregar todos os rasters que tenham o prefixo srtm0x. O curing “guloso” deve ser utilizado como *.tif, por exemplo.

    A opção que controle o nível das pirâmides é -l.

    Quanto à perfomance: não sei ainda lhe dizer, mas me pareceu bem eficiente a carga de dados, quanto as queries. Processamento, como eu disse, é outra história – ainda não existem funções de baixo nível para executá-los, mas em SQL é possível, com uma velocidade quase aceitável.

    Para inserir um novo grid à mesma tabela (um quadrícula nova de uma carta topográfica por exemplo) você utiliza as opções disponíveis no gdal2wktraster, que irá gerar um único insert para você.


Leave a comment


Get Adobe Flash playerPlugin by wpburn.com wordpress themes