PostGIS

O PostGIS é uma extensão espacial do sistema gerenciador de banco de dados PostgreSQL que adiciona suporte a objetos geográficos, permitindo o armazenamento, consulta e análise de dados espaciais. Com o PostGIS, é possível trabalhar com dados vetoriais (como pontos, linhas e polígonos) de forma eficiente, seguindo os padrões definidos pelo Open Geospatial Consortium (OGC). Ele fornece uma ampla gama de funções para análise espacial, como cálculo de distâncias, interseções, buffers e operações topológicas, sendo amplamente utilizado em aplicações de Sistemas de Informação Geográfica (SIG), planejamento urbano, meio ambiente, geoprocessamento e geotecnologias em geral.

O QGIS (Quantum GIS) é um software livre e de código aberto para Sistemas de Informação Geográfica (SIG), que permite visualizar, editar, analisar e mapear dados geoespaciais de forma intuitiva e poderosa. Compatível com diversos formatos de dados vetoriais e raster, incluindo shapefiles, bancos de dados espaciais como PostGIS, e serviços web como WMS e WFS, o QGIS oferece uma ampla variedade de ferramentas para análise espacial, geoprocessamento e produção cartográfica.

A atividade a seguir foi sugerida no material Bancos de Dados Geográficos, disponível no link, que inclui mais informações técnicas e de instalação. Para ver mais sobre linguagem SQL clique no link.

Nessa atividade de Consulta de Proximidade, primeiro deve-se baixar os dados e descompactá-los em um lugar acessível pelo banco de dados e o QGIS. Deve-se criar uma camada (layer) de municípios do Brasil e uma outra camada com os munícipios dentro de um raio de 2 graus com relação a um determinado ponto.

Pode-se gerar a tabela no banco de dados com as informações dos municípios brasileiros usando o terminal Linux, através dos comandos shp2pgsql e psql.

O comando shp2pgsql é uma ferramenta de linha de comando utilizada para converter arquivos shapefile (.shp), que contêm dados geoespaciais vetoriais, em instruções SQL compatíveis com o PostGIS. Essas instruções podem ser usadas para importar os dados do shapefile diretamente para uma tabela espacial em um banco de dados PostgreSQL com PostGIS habilitado. Veja um exemplo:

shp2pgsql -c -g "geom" -s 4674 -i -I -t "2D" -W UTF-8 municipios_2018.shp public.municipios > municipios.sql
  • -c: Cria a tabela no banco de dados (create). Se a tabela já existir, ela será substituída.
  • -g “geom”: Define o nome da coluna de geometria como geom.
  • -s 4674: Define o SRID (Sistema de Referência Espacial) como 4674, que corresponde ao SIRGAS 2000, comumente usado no Brasil.
  • -i: Cria automaticamente um índice GiST na coluna de geometria, para melhorar a performance de consultas espaciais.
  • -I: Gera comandos SQL para criar um índice espacial (é equivalente a -i, usado por compatibilidade; pode ser redundante).
  • -t “2D”: Especifica que as geometrias devem ser tratadas como bidimensionais, ignorando informações de altura (Z) ou medida (M).
  • -W UTF-8: Informa a codificação de caracteres do shapefile, neste caso UTF-8, garantindo que acentuações e caracteres especiais sejam importados corretamente.
  • municipios_2018.shp: Nome do arquivo shapefile de entrada que contém os dados geográficos.
  • public.: Nome do esquema do banco de dados (“public” é o esquema padrão para novos objetos, como tabelas, a menos que você especifique outro; caso não informe um nome, a tabela será criada no esquema padrão do usuário que executar o script, que geralmente chama “public”).
  • municipios: Nome da tabela que será criada no banco de dados.
  • > municipios.sql: Redireciona a saída do comando (instruções SQL geradas) para o arquivo municipios.sql.

O comando psql é o terminal interativo de linha de comando do PostgreSQL, utilizado para executar instruções SQL diretamente em um banco de dados. Com ele, é possível criar e gerenciar bancos de dados, tabelas, usuários, permissões, realizar consultas, importar e exportar dados, entre outras operações administrativas. No contexto do PostGIS, o psql é frequentemente utilizado para executar os scripts SQL gerados pelo shp2pgsql, inserindo os dados espaciais no banco. Além disso, sua flexibilidade e suporte a scripts tornam o psql uma ferramenta essencial para automatizar tarefas e gerenciar bancos de dados de forma eficiente. Veja um exemplo:

psql -U postgres -h localhost -p 5432 -d bdgeo -f municipios.sql
  • -U postgres: Especifica o nome do usuário do PostgreSQL que realizará a conexão, neste caso, “postgres”.
  • -h localhost: Define o endereço do host do banco de dados, aqui sendo “localhost” (a máquina local).
  • -p 5432: Indica a porta do servidor PostgreSQL, padrão 5432.
  • -d bdgeo: Define o nome do banco de dados de destino, que neste caso é “bdgeo”.
  • -f municipios.sql: Especifica o arquivo SQL a ser executado no banco de dados, aqui sendo o arquivo “municipios.sql” gerado pelo comando shp2pgsql.

Depois da execução desses comandos no terminal, você poderá abrir a interface gráfica do QGIS. Para carregar as informações de municípios no banco de dados como uma camada, você pode fazer os seguintes passos:

  1. No QGIS, vá até Database > DB Manager > Import Layer/File. No botão com três pontinhos, localize e selecione o arquivo .shp que deseja importar.
  2. Na aba Options, marque as opções: Primary key, Geometry column, Source SRID, Target SRID e Create spatial index.
  3. Para definir corretamente os valores de SRID, clique no botão ao lado dos campos Source SRID e Target SRID, identificados como Select CRS.
  4. Na janela que abrir, clique em Predefined CRS. Se aparecer em Recently used coordinate reference systems a opção com o sistema SIRGAS 2000 e EPSG:4674, selecione-a e clique em OK. Caso não apareça, digite 4674 no campo Filter, selecione Geographic (2D) e escolha o sistema SIRGAS 2000 – EPSG:4674, depois clique em OK.
  5. Após confirmar as configurações, clique em OK para concluir a importação da camada para o banco de dados.
  6. Para visualizar a camada importada, vá até a aba Browser (localizada no canto superior esquerdo da interface do QGIS), abra o esquema correspondente no banco de dados, localize a camada e arraste-a para a janela Layers.
Telas do QGIS para importação de shapefile "terras_indigenas.shp" como uma layer
Telas do QGIS para importação de shapefile “terras_indigenas.shp” como uma layer

Para visualizar com um OpenStreetMap, na árvore da janela “Browser” (tela inicial, esquerda superior), clique em “XYZ tiles” e dê duplo clique em “OpenStreetMap”. Depois, clique na camada e arraste para baixo para deixar essa nova camada no final da pilha e visualizar a camada gerada sobre o mapa.

O próximo passo é o de selecionar os municípios dentro de um raio de 2 graus a partir do ponto informado. Para isso, você pode usar uma query como esta:

SELECT *
  FROM municipios
 WHERE ST_DWithin(
           geom,
           ST_GeomFromText('POINT(-43.59 -20.32)', 4674),
           2.0
       );
  1. SELECT *: Seleciona todas as colunas da tabela.
  2. FROM municipios: Indica que os dados serão consultados da tabela chamada municipios.
  3. WHERE ST_DWithin(…): Filtra os registros onde a geometria da tabela está dentro de uma distância específica em relação a um ponto de referência.
  4. geom: É a coluna de geometria da tabela municipios, usada para comparação espacial.
  5. ST_GeomFromText(‘POINT(-43.59 -20.32)’, 4674): Cria uma geometria do tipo ponto a partir das coordenadas informadas (longitude -43.59, latitude -20.32), usando o sistema de referência espacial EPSG 4674 (SIRGAS 2000).
  6. 2.0: Define a distância do raio de busca em graus decimais (já que o SRID 4674 é um sistema geográfico), ou seja, serão retornados os municípios cuja geometria está a até 2 graus do ponto especificado.

Essa query pode ser executada diretamente no QGIS conforme os seguintes procedimentos:

  1. No QGIS, vá em Database > DB Manager > PostGIS. Informe o login e a senha do banco de dados e selecione o esquema desejado.
  2. Clique no ícone SQL Window para abrir a janela onde é possível digitar ou colar comandos SQL.
  3. Escreva ou cole a consulta SQL desejada na janela e clique no botão “Execute” para executá-la.
  4. Após a execução, selecione a opção “Load as new layer”, defina um nome para a nova camada e clique em “Load” para carregá-la no projeto.
Telas do QGIS para execução de query e carregamento do resultado como uma layer
Telas do QGIS para execução de query e carregamento do resultado como uma layer

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.