quarta-feira, 14 de dezembro de 2011

Dados de prescipitação TRMM em TIF usando GDAL

Os dados de prescipitação TRMM podem ser convertidos de hdf para tif utilizando o gdal_translate. Este processo facilita o uso em aplicativos de SIG.

Para isso podemos utilizar o "gdal_translate". Esta ferramenta vem disponível nos pacotes quem incluem a GDAL , como por exemplo,QuantumGIS, FWTools e OSGeo4W.

Apesar do QuantumGIS possuir uma interface gráfica para efetuar este processo, ela não permite que sejam definidos novas coordenadas de canto da imagem. Portanto, é necessária a utilização de linha de comando.

Em um terminal (ou OSGeo4W Shell no Windows) digite:

gdal_translate HDF4_SDS:UNKNOWN:NomeDoArquivo.hdf:0 saida.tif -a_ullr -180 50 180 -50 -a_srs EPSG:4326


Durante a conversão estamos definindo o sistema de coordenadas (WGS 84 Coordenadas geográficas) e a região ocupada pela imagem (-180 a 180 em longitude, -50 a 50 em latitude). Caso estes parâmetros não fossem passados, a ferramenta converteria apenas a matriz, sem georreferenciamento.


Para executar este comando em todos os arquivos de uma pasta (em lote) em sistemas operacionais Linux (com BASH) pode-se utilizar:



for f in *.hdf
do
gdal_translate HDF4_SDS:UNKNOWN:${f}:0 ${f}.tif \
-a_ullr -180 50 180 -50 -a_srs EPSG:4326
done

segunda-feira, 3 de outubro de 2011

Visualizar camadas do Postgis do TerraView em outros aplicativos

O TerraView 4 foi desenvolvido utilizando a TerraLib 4. Esta biblioteca tem uma organização de banco de dados pouco usual, pois separa as representações vetoriais de uma tabela das informações tabulares da mesma.

Apesar disso, o TerraView pode armazenar os dados geográficos utilizando os objetos nativos do PostGIS. Isto permite que os usuários vejam as geometrias em outros softwares, mas não dá acesso aos atributos.

Para visualizar todas as informações numa única tabela, pode-se fazer uso do conceito de "views" do PostgreSQL. Uma "view" é uma tabela dinâmica, produzida à partir de uma consulta. Neste caso, utilizaremos a "view" para juntar as tabelas de geometria e atributos.

Primeiramente, precisamos descobrir em que tabelas cada parte está armazenada. O TerraLib não dá nenhum nome intuitivo às tabelas de geometria, portanto seria difícil adivinhar qual é a tabela correta. Desta forma, pode-se utilizar o comando SQL a seguir para listar todos os relacionamentos entre geometrias e tabelas que o TerraView conhece.

select l.layer_id, l.name, r.geom_table, t.attr_table, t.attr_link  
from te_layer as l, te_representation as r, te_layer_table as t 
where (l.layer_id=t.layer_id) and (l.layer_id=r.layer_id)

A coluna "t.attr_link" é o nome da coluna da tabela de atributos que serve de ligação ao "object_id" da tabela de geometrias.

De posse do nome das duas tabelas onde estão nossos dados e das colunas que os ligam, pode-se criar a "view" que materializa a ligação:

CREATE VIEW pg_rio AS 
SELECT *  FROM polygons6 as g, rio< as t
WHERE t.object_id_6 = g.object_id;

Esta "view" já pode ser visualizada em aplicativos como GvSIG, QGIS e MapServer.

Como resultado secundário deste post, produzi um plugin simples para o Quantum GIS que permite carregar as camadas do TerraLib+PostGIS.

segunda-feira, 26 de setembro de 2011

C45IDL - classificador por árvores de decisão

Como trabalho da disciplina de Reconhecimento de Padrões e Aprendizado Computacional, implementei um classificador supervisionado que utiliza árvores de decisão binárias.

Disponibilizei o código-fonte e os executáveis no site do projeto C45IDL.

A linguagem escolhida foi IDL, que é uma linguagem proprietária. Todos os usuários do ENVI tem todos os requisitos para utilizar o programa. Para os usuários linux existe ainda a possibilidade de utilizá-lo com o GnuDataLanguage (implementação aberta do IDL).

O objetivo do programa é encontrar as melhores decisões para separar as classes que foram apresentadas para ele através de dados de treinamento. No site do projeto tem uma descrição breve de como utilizar o ENVI para produzir o arquivo de ROI no formato que o aplicativo lê. Basicamente deve-se exportar as ROI para ASCII, guardando no arquivo apenas o identificador das amostras e o valor das bandas.

A figura a seguir apresenta a interface do programa. Este algoritmo divide o conjunto de amostras em treinamento em validação. Portanto o "0.7" significa que 70% das amostras será utilizada como treinamento e 30% como validação.

Os parâmetros "Minimum samples per node" e "Maximum percentual error in a node" são critérios para para decidir quando a árvore deve parar de crescer. O "mínimo de amostras por nó" significa que quando o programa chegar a 25 amostras ele não tentará mais diferenciar as classes de treinamento. É um parâmetro necessário mas pouco eficiente.

Já a "proporção máxima de erro" pode ser utilizada para aceitar ruído nos dados de treinamento. Isso significa que ele considera o nó pronto quando chegar a menos de 1% de ruído. Em imagens menos ruidosas o usuário pode querer diminuir isso para 0% ou aumentar no caso de imagens mais ruidosas.

A figura a seguir apresenta o resultado de uma árvore construída com uma imagem Landsat com os parâmetros inalterados.
Caso o usuário forneça os dados de treinamento mas não os de validação, o programa irá apenas tentar gerar a árvore de decisão no formato que o ENVI lê. Caso seja passada também uma imagem a classificar, ele irá gerar uma imagem classificada como saída.

Como de costume, agradeço a todos que puderem testar e contribuir para o aperfeiçoamento do programa.

sexta-feira, 26 de agosto de 2011

Nova página do projeto QGIS WktRaster

O Quantum GIS agora tem um novo sistema de controle de defeitos nos plugins. Portanto, diversos plugins estão migrando para o novo site de forma a permitir aos usuários que reportem problemas e compartilhem experiência de uso.

O projeto WktRaster Plugin for Quantum GIS já está hospedado no endereço:
http://hub.qgis.org/projects/wktraster

Agradeço a todos que possam relatar possíveis problemas com o plugin. Software Livre cresce exatamente por esse relacionamento agradável entre usuários e desenvolvedores.

segunda-feira, 8 de agosto de 2011

Referências Bibliográficas perfeitas no OpenOffice e Word

Os usuários do Firefox podem contar com um grande auxílio na hora de buscar referências bibliográficas para suas pesquisas.

O plugin Zotero do Firefox permite que o usuário crie uma conta para armazenar suas referências no servidor do Zotero. Isso significa que em qualquer máquina que tenha o plugin instalado você terá acesso à todas as suas pastas com referências bibliográficas organizadas e formatadas.

Para a parte de pesquisa, o Zotero permite que durante a busca em sites como o Google Scholar sejam baixados os arquivos de referência no formato EndNote. Isso permite que durante a navegação o usuário armazene as referências diretamente dos sites de buscas. Além disso é mantigo o link para do artigo original, permitindo a sua leitura quando necessário.

Para a formatação no texto, o Zotero tem plugins para Microsoft Word e para o OpenOffice Writer. Ambos funcionam com a definição de estilos, que estão disponibilizados no próprio site do Zotero. Ficamos gratos aos desenvolvedores do estilo ABNT para o Zotero por facilitar muito nossas vidas.

Com isso o Zotero se mostra uma plataforma amigável para gestão de referências com software livre, tornando o OpenOffice um verdadeiro concorrente do Latex para produção científica.

Deixo publicado aqui também um modelo que deve atender aos padrões da Sociedade Brasileira de Computação.

segunda-feira, 1 de agosto de 2011

wktraster plugin for Quantum GIS 0.5

Tenho o prazer de comunicar que estou lançando a versão 0.5 do plugin wktraster.

Nesta versão os principais avanços foram:
- a possibilidade de carregar apenas uma linha da tabela (permitindo ler tabelas onde cada linha é uma imagem pertencente a um mosaico).
- Listagem melhorada de tabelas raster, permitindo carregar tabelas oriundas de processamentos.
- Carregamento de raster melhorado, permitindo cancelar durante o processo e mostrando as etapas da criação das overviews.
- Possibilidade de carregar os retângulos envolventes que compõe as matrizes da tabela.

Além disso a versão sofreu uma forte correção de bugs. Solicito a todos que encontrarem bugs que me enviem e-mail ou o reportem no site do projeto.

Carregamento de uma imagem com opções de overviews:


Lendo apenas uma linha da tabela

Lendo a representação vetorial da tabela

terça-feira, 19 de julho de 2011

OpenStreetMaps do Brasil

Com o passar do tempo o OpenStreetMaps está se tornando uma fonte de dados completa. Os grandes centros urbanos do país já possuem informação detalhada. Esta informação, disposta em um banco contínuo pode servir como camada de ruas de todo o país.

Para quem não conhece, o OpenStreetMaps é uma base contribuída cuja precisão é compatível com GPS de navegação. Ou seja, os erros dentro da base devem estar entre 3 a 15 metros.




Na wiki do OpenStreetMaps existem recomendações de como obter o mundo inteiro no formato OSM. Tentando proceder desta forma
existem dois problemas:
1- É necessário converter para o seu banco de dados.
2- É necessário recortar a região de interesse.

Algumas iniciativas deixam este trabalho pronto. A cloudmade.com é uma destas que possui um recorte por países. Portanto é possível descarregar as informações do OpenStreetMaps, em Shapefile, de todo o Brasil, por pouco mais de 100mb.

quarta-feira, 13 de julho de 2011

Celulares Android aplicados ao Sensoriamento Remoto

Fiz uma apresentação para a turma do mestrado indicando as principais aplicações de um celular com Android para coleta de informações para sensoriamento remoto.

Decidi disponibilizá-la: Celulares Android aplicados ao Sensoriamento Remoto

segunda-feira, 11 de julho de 2011

Compilando para windows com mingw e Qt3 GPL

Um dos maiores desafios do programador que gosta de Linux é gerar produtos para os usuários windows. Como a Qt é uma biblioteca multi-plataforma, isso é possível.

São necessários para esta tarefa os pacotes: mingw32, qt3-dev-tools, libqt3-mt-dev (em uma instalação Ubuntu 11.04).

Primeiramente, a Qt3 pode ser obtida através do projeto qt-win. É recomendado que o desenvolvedor obtenha o instalador da biblioteca para windows e a instale usando Wine. Para poder utilizar o arquivo a seguir, instale no diretório: C:\qt-win-free-mingw-3.3.4

Em seguida, seguiremos as configurações do mkspecs, conforme a referência descreve. Este arquivo muda muito conforme onde você instalou a Qt e com as versões do compilador e da biblioteca Qt. Portanto, caso precise alterar, siga a referência. Recomenda-se copiar a pasta /usr/share/qt3/mkspecs/win32-g++ para /usr/share/qt3/mkspecs/win32-mingw e colar o arquivo qmake.conf na pasta win32-mingw.

Agora ao utilizar o qmake pode-se utilizar o parâmetro "-spec win32-mingw" para passar para o compilador que você deseja um arquivo executável em windows, ao invés de um executável em linux.

Referências:
Cross compiling Qt/Win Apps on Linux

quinta-feira, 19 de maio de 2011

WktRaster QGIS Plugin 0.4

Fico feliz em anunciar a nova versão do Plugin WKTRaster para Quantum GIS.
Nesta versão o plugin passa a ser compatível com GDAL 1.8 e Postgis 2.0.
Portanto todos os bugs que existiam de leitura e escrita com a GDAL 1.7 sumiram.

Os primeiros testes são promissores e demonstram que o Quantum GIS já pode ser utilizado para trabalhar com imagens no banco PostgreSQL.


quarta-feira, 18 de maio de 2011

Azimutes e Distâncias

Alguns anos atrás um amigo precisou olhar um memorial descritivo antigo para entender o processo de subdivisão do loteamento que ocorreu com os anos. No memorial vinham apenas azimutes e distâncias a partir de uma coordenada conhecida.
Como esse problema é algo frequente, escrevi o plugin Azimuth and Distance para o Quantum GIS. O objetivo do plugin é exatamente desenhar geometrias utilizando ângulos e distâncias.
Posteriormente, foi levantado interesse de um programador americano, Fred Laplante em ajudar no plugin e, depois de diversas versões e correções, podemos dizer que consideramos o plugin satisfatório e prático.


Espero que seja útil!

sábado, 12 de março de 2011

Modelos digitais de elevações 3D

Durante alguns devaneios brincando com engines de jogos 3D e modelos de elevações percebi que é muito simples transformar dados geográficos raster (geotiff) em modelos x3d de terreno.

Para isso escrevi o script: gdal2x3d

O objetivo deste código é ler um modelo digital de elevações guardado em um tif, hgt, ou similares (lidos pela GDAL) e armazenar a sequência em um ElevationGrid do arquivo x3d.
Dessa forma o modelo gerado pode ser lido por programas de modelagem 3D como o Blender ou game engines como crystal space

Abraços a todos

sábado, 22 de janeiro de 2011

Instalando wktraster no ubuntu

Primeiramente, descarregue o postgis 1.5.2 (versão atual do ubuntu maverick) e o wktraster do site do postgis.
Para compilar tudo corretamente são necessárias:
libxml2-dev
postgresql-server-dev-8.4

Descompactando a pasta do postgis-1.5.2 executaremos:

./configure
make

Agora descompactaremos a pasta do wktraster. Nesse passo precisamos dizer para o wktraster onde está aquela pasta que compilamos o postgis.

./configure --with-postgis-sources=/home/mauriciodev/Downloads/carto/postgis-1.5.2
make
sudo make install 

O wktraster já está pronto. Agora falta carregar no banco.

su postgres
createdb wktraster
createlang plpgsql wktraster
psql -d wktraster2 -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d wktraster2 -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d wktraster -f /usr/share/postgresql/8.4/contrib/rtpostgis.sql
Pronto. Agora podemos carregar dados com o plugin do Quantum GIS.

Eclipse e Qt

Lembrando que minha IDE preferida é o Eclipse por sua versatilidade, comecei a procurar como fazer integração do Eclipse com a Qt. Essa ferramenta ajuda muito a desenvolver plugins em C++ para o QGIS.

O Eclipse tem uma extensão de integração com a Qt (Qt Eclipse Integration). Este software permite gerenciar o arquivo do qmake dentro do Eclipse.

Para instalar basta mesclar a pasta do Qt Eclipse Integration com a do Eclipse. O software já estará funcionando assim que o Eclipse for reiniciado. Recomenda-se executar o comando "eclipse -clean" para limpar o cache de extensões do Eclipse.

Podemos então criar um projeto indo em "File->New-> Qt Gui project". Esse projeto já é configurado com QMake. Ou seja, o arquivo .pro está lá pronto para ser alterado.

No caso do QGIS foram necessárias algumas alterações no arquivo ".pro".

TEMPLATE = lib
TARGET = QgsImageProcessing
QT += core \
    xml
HEADERS += qgsconvolutionui.h \
    qgsimageprocessingplugin.h
SOURCES += qgsconvolutionui.cpp \
    qgsimageprocessingplugin.cpp
FORMS += qgsconvolutionui.ui
RESOURCES += 
INCLUDEPATH += /usr/include/qgis
DEFINES += GUI_EXPORT= \
    CORE_EXPORT=

Na imagem a seguir fica clara a integração do Eclipse ao editar um arquivo ".ui" (muito parecido com o QtDesigner).

segunda-feira, 17 de janeiro de 2011

Viajando pelo Brasil com QGIS

Seu Software de SIG preferido agora também te ajuda nas viagens! Neste post mostro como traçar uma rota das rodovias brasileiras no QGIS e navegar utilizando imagens de satélite do GoogleMaps.
Primeiramente, vamos aos requisitos:
Dados: Banco Contínuo de 1:1.000.000 (disponivel no IBGE)
Softwares: Quantum GIS 1.6+ RoadGraph Plugin (disponivel em win32 e linux) + OpenLayers Plugin (disponivel através do repositório de plugins python)

Obs.: Vale lembrar que o RoadGraph Plugin será incluído no QGIS oficial na versão 1.7

Primeiramente, carregamos nossos dados. A camada de rodovias é chamada ST_Rodovias*. Quando o plugin está instalado (copiando-o para a pasta c:\osgeo4w\apps\qgis\plugins\ no caso do OSGeo4W), já aparece a caixinha de traçado de rotas no canto inferior esquerdo. Clicamos na origem e no destino e o plugin traçará nossa rota conforme a figura.

* Na escala 1.100.000 quase todas as pontes são pontos. Caso quiséssemos contar as pontes também, deveríamos editar a camda ST_Rodovias e incluir os objetos da camada ST_Ponte_Tunel.


Usando o botão direito do mouse sobre a camada "shortest path" podemos exportar para ShapeFile nossa rota. Faremos isso para poder reprojetá-la corretamente.

Agora, podemos carregar o plugin OpenLayers do QGIS.

E o resultado, conforme esperávamos, é uma visualização da rota traçada sobre imagens do Google Maps.

O grande poder desta solução é, por exemplo, descobrir quantos munícipios serão atravessados por estar rotas. Ou quantas cidades passarão a até 100km do percurso. Ou, conforme alguns amigos meus sempre sonharam: Qual é o comprimento total do trecho X ao trecho Y que eles possuem na base deles.
São análises possíveis por estarmos dentro de um software de sig com uma base de dados completa.

quarta-feira, 5 de janeiro de 2011

Postgis Raster Loader no QGIS


Esta semana foi lançada a versão 0.3 do plugin WktRaster para o Quantum GIS. A grande melhoria desta versão é o Loader. É uma interface simples para carregar as imagens no banco baseada no código escrito pelo pessoal do Postgis Raster.








No futuro, com as novas versões da GDAL este loader será incrementado com diversas funcionalidades permitidas pelo Postgis Raster. Por hora o único objetivo é colocar o dado no banco de uma maneira eficiente e simples.
O Paolo Cavalini está ajudando bastante nos testes com as versões recentes da GDAL e estamos observando que o Jorge Arevalo está preparando uma versão muito melhorada a ser publicada na GDAL 1.8.
Estaremos aguardando!

QGIS, Raster e Reprojeção

Reprojetar arquivos matriciais (raster) em tempo de execução (on-the-fly) sempre foi uma tarefa complicada para os desenvolvedores de softwares de SIG. O QuantumGIS, porém, teve uma abordagem diferente. Quando se trata de reprojetar um arquivo matricial ele simplesmente não faz. Isso porque até agora ninguém apontou uma técnica realmente vantajosa de reprojetar raster de maneira eficiente. Então... Como trabalhar?
Entre alguns companheiros temos a seguinte linha: "Nunca se reprojeta o raster on-the-fly". Quem tem muita informação sabe que processar a todo momento alguns gigabytes de memória é perda de tempo. Por isso sempre deixamos os arquivos matriciais já reprojetados para o sistema de referência que será trabalhado.

Se o usuário configurar o Quantum GIS para trabalhar no mesmo sistema de coordenadas que o raster, todos os vetores são reprojetados para este sistema, possibilitando trabalhar com vetores em outros sistemas de coordenadas.Na figura a seguir vemos a transformação "on the fly" habilitada e o projeto (Configurações -> Propriedades do Projeto) configurado para exibir informações em WGS 84 Latitude e Longitude.


 Como este é o mesmo sistema de coordenadas utilizado pelo arquivo raster do SRTM utilizado como exemplo, o software reprojetou os vetores (que estavam em EPSG: 900913 Google Mercator) para o sistema do projeto. Sendo este sistema o mesmo que o do raster, o raster é visualizado. Caso não seja o arquivo simplesmente não será exibido.
Na figura abaixo vemos o resultado da sobreposição quando o arquivo raster e o projeto estão no mesmo sistema de coordenadas mas os vetores não.