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 :)
3 comentários:
Parabéns pelo material e por estar compartilhando mais esse conteúdo. Abraço professor!
Sugestão para o clip da imagem com o PostGIS...
create table recorte as
select
row_number() over()::integer as rid,
--st_clip(a.rast,st_buffer(a.geom,0)) as rast, -- se quiser fazer um recorte maior que a imagem... pode acrescentar o st_union
st_union(st_clip(a.rast,a.geom)) as rast, -- st_union somente para nao ficar com um monte de rid...
geom -- nao precisa da geometria
from
(select pol.gid, img.rast, pol.geom from SEU_POLIGONO pol, SUA_IMAGEM img where pol.gid = ID_DO_POLIGONO_DE_SUA_ESCOLHA) a
where
st_intersects(a.rast,a.geom)
group by a.gid, a.geom;
Sugestão para o clip da imagem com o PostGIS...
create table recorte as
select
row_number() over()::integer as rid,
--st_clip(a.rast,st_buffer(a.geom,0)) as rast, -- se quiser fazer um recorte maior que a imagem... pode acrescentar o st_union
st_union(st_clip(a.rast,a.geom)) as rast, -- st_union somente para nao ficar com um monte de rid...
geom -- nao precisa da geometria
from
(select pol.gid, img.rast, pol.geom from SEU_POLIGONO pol, SUA_IMAGEM img where pol.gid = ID_DO_POLIGONO_DE_SUA_ESCOLHA) a
where
st_intersects(a.rast,a.geom)
group by a.gid, a.geom;
Postar um comentário