Blog Geo.NET Geoprocessamento, SIG e Sensoriamento Remoto

31jul/104

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

Compartilhe:

Related posts:

  1. Construindo funcionalidades para o WKT Raster
  2. Palestra PgCon Br 2009
  3. Criação de Templates para PostGIS
  4. Funções PostGIS #2
  5. Funções PostGIS #1
Comentários (4) 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ê.

  3. Olá, gostaria de saber pq quando eu executo o comando dessa forma o terminal trava e não gera o arquivo: python “c:\program files\postgresql\8.3\bin\gdal2wktraster.py” -r “e:\teste.jpg” -k 90×90 -t testes_raster -f grid -o “e:teste.sql”. Quando eu tiro a opção “-k 90×90″ ele gera o arquivo. Outra é como posso visualizar usando o openJump.

  4. Olá Rangel,

    Com as informações que você passou não consigo “debugar” a saída. Aqui tudo rola normalmente.

    A visualização de rasters como a de vetores, se não me engano, ainda não foi implantada.


Leave a comment

(required)


*

Get Adobe Flash playerPlugin by wpburn.com wordpress themes