quarta-feira, julho 15, 2015

Análises Espaciais com o PostGIS Raster - Parte 2

Na postagem anterior, vimos como fazer a conversão e importação de um arquivo raster para um Banco de Dados Espaciais.

A seguir serão demostradas algumas consultas e análises com os dados da tabela uso_ocupacao_solo.

1) Obtendo Metadados


Para visualizar os metadados de um registro da tabela raster, podemos utilizar a seguinte consulta:


Como resultado, são exibidos diversos valores, tais como: coordenadas do canto superior (esquerdo e direito), tamanho do pixel, SRID , número de bandas, valores NODATA, dentre outros exibidos na Figura 1.

Figura 1 - Obtendo Metadados






Outro dado importante é o espaço ocupado pela tabela no HD, obtido através da seguinte consulta:


2) Interseção da Tabela Raster com um Município


Exemplo: gerar uma nova tabela a partir do recorte (clip) do uso e ocupação do solo em função dos limites do município de Ibitinga (Figura 2).

Por padrão, operações que geram novas geometrias envolvendo tabelas de diferentes tipos (raster/vetor) geram vetores a partir da poligonização do raster. A Figura 2 mostra o resultado da tabela criada no QGIS:

Figura 2 - Clip entre a tabela raster e o município de Ibitinga























As dimensões de cada polígono desta tabela são equivalentes a resolução espacial do raster, definido na importação com o comando raster2pgsql.

3) Quantificando o Resultado


Exemplo: qual é a área total de cada classe de uso no município de Ibitinga, em hectares?

O resultado da consulta pode ser visto na Figura 3:

Figura 3 - Área total de cada classe de uso



Também é possível realizar esta mesma consulta no terminal e exportar o resultado para CSV, através do comando:
$  psql sp -c  "copy ( SELECT dn, SUM(ST_Area(geom::geography)) / 10000 AS area_ha FROM uso_ocupacao_ibitinga GROUP BY dn ORDER BY dn ) to STDOUT WITH CSV" -o sum.csv

4) Análise de Buffer


Exemplo: determinar o uso e ocupação do solo para um buffer com raio de 500 metros, em torno do rio formado pelos trechos com os seguintes gids: 8530, 8560, 8561, 8562, 8578, 8590, 8591, 8592,8595 (Figura 4).

Figura 4 - Trechos que compõem o rio a ser analisado

Desta forma podem ser analisadas as classes de uso e ocupação do solo que estão dentro do buffer. O resultado pode ser visto na Figura 5:

Figura 5 - Resultado do buffer com as classes de uso e ocupação do solo




quarta-feira, julho 08, 2015

Análises Espaciais com o PostGIS Raster - Parte 1


O projeto PostGIS Raster possibilita o armazenamento e manipulação de dados matriciais em Banco de Dados Espaciais através da linguagem SQL.

Nesta série de tutoriais, serão demonstradas algumas funcionalidades desta extensão através da utilização dos dados de uso e ocupação do solo da mesorregião de Aracicaba (SP) e adjacências. Os dados podem ser obtidos através deste link: http://ge.tt/1Hye7zJ2/v/0?c

Caso você ainda não tenha o PostgreSQL e o PostGIS instalados no Ubuntu, este post descreve o processo: Instalação do PostGIS 2.0 no Ubuntu via Terminal

1) Criação do Banco de Dados Espaciais


Com o terminal aberto, entre com o comando:

$ createdb sp

Uma vez criado o Banco de Dados, deve-se então habilitar a extensão PostGIS no mesmo:

$ psql sp
psql (9.4.4)
Type "help" for help.

postgis=# CREATE EXTENSION postgis;

Digite \q para sair do Banco de Dados.

2) Conversão do arquivo Raster para SQL


Para realizar a conversão, abra o terminal e navegue até o diretório onde o arquivo uso_ocupacao.tif se encontra, em seguida, execute o seguinte comando:
$  raster2pgsql -s 4326 -I -M -C uso_ocupacao.tif -F -t 30x30 uso_ocupacao_solo > uso_ocupacao_solo.sql

Cada flag, que são as letras iniciadas com um "-" determina uma propriedade no arquivo sql que é gerado, neste caso em específico, temos:
  • -s : sistema de referência espacial do raster (SRID 4326)
  • -I: cria um índice GiST na coluna do raster
  • -M: adiciona um "Vacuum analise" ao script
  • -C: cria as constraints da tabela raster
  • -F: adiciona uma coluna com o nome do arquivo
  • -t 30×30: resolução espacial do raster

Outras opções sobre as flags e sobre o raster2pgsql  podem ser encontradas no link:


Agora é possível carregar todos os arquivos no Banco de Dados (municipios.sql, hidrografia.sql e uso_ocupacao_solo.sql) através de um único comando:

$  for f in *.sql; do psql -f $f -d sp; done

3) Visualização das tabelas no QGIS:


Uma vez configurada a conexão entre o QGIS e o Banco PostGIS, através do plugin DB Manager podemos então visualizar as tabelas do tipo raster, como mostra a Figura 1:

Figura 1 - Com o botão direito do mouse é possível escolher a opção "Add to canvas"

Para melhor representação visual da tabela, clique com o botão direito no layer e em "Properties -> Style" realize o ajuste exibido na Figura 2:

Figura 2 - Ajuste das cores do mapa temático

A Figura 3 mostra como deve ficar o resultado no QGIS.

Figura 3 - Mapa de uso e ocupação do solo

No próximo post demonstrarei algumas consultas e análises espaciais úteis utilizando os dados desta tabela, através da linguagem SQL... até breve :)