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:
- 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.
- Na aba Options, marque as opções: Primary key, Geometry column, Source SRID, Target SRID e Create spatial index.
- Para definir corretamente os valores de SRID, clique no botão ao lado dos campos Source SRID e Target SRID, identificados como Select CRS.
- 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.
- Após confirmar as configurações, clique em OK para concluir a importação da camada para o banco de dados.
- 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.

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 );
- SELECT *: Seleciona todas as colunas da tabela.
- FROM municipios: Indica que os dados serão consultados da tabela chamada municipios.
- 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.
- geom: É a coluna de geometria da tabela municipios, usada para comparação espacial.
- 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).
- 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:
- No QGIS, vá em Database > DB Manager > PostGIS. Informe o login e a senha do banco de dados e selecione o esquema desejado.
- Clique no ícone SQL Window para abrir a janela onde é possível digitar ou colar comandos SQL.
- Escreva ou cole a consulta SQL desejada na janela e clique no botão “Execute” para executá-la.
- 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.
