Primerios Passos em SQL usando QGIS

Confira nosso curso online de QGIS

Para projetos isolados, SIGs são fundamentais para realizar análises espaciais. Agora, quando temos que coletar, armazenar, analisar sistematicamente um conjunto contínuo de dados ambientais, bancos de dados são a solução. E a linguagem que eles falam é SQL.

Para aqueles que já estão habituados a utilizar softwares de SIG e realizar suas análises de forma convencional, pode parecer estranho aprender banco de dados. Isso não é uma disciplina para a turma de TI?

Sim, banco de dados é uma das bases dos profissionais de TI. Mas saiba que banco de dados espaciais não é, sendo necessário que eles aprendam conceitos de dados espaciais que nós, profissionais que atuam com dados ambientais e espaciais, já sabemos. Por isso, é interessante aprender um pouco da arte deles, visto que algumas vagas de analista de geoprocessamento (entre outras denominações) exigem tal conhecimento.

Yeung e Hall (2007) colocam que grande parte dos avanços na obtenção, gerenciamento e uso de informações espaciais ocorreram devido ao uso de banco de dados espaciais. Os autores ainda comentam que nenhuma função ou análise espacial funcionaria sem um sistema de banco de dados espacial por trás dela.

Assim, de forma que possamos aprender um pouco sobre banco de dados espaciais, vamos ver como utilizar SQL (Structured Query Language) no QGIS para nos familiarizar com essa linguagem.

O que são banco de dados espaciais?

Banco de dados espaciais nada mais são que banco de dados com um sistema de informações geográficas inclusos, sendo desenvolvidos para processar dados que estão localizados em algum lugar no espaço.

Embora exista uma intersecção entre as análises por meio de SIG e banco de dados espaciais, o segundo surge conforme a quantidade de dados aumenta significativamente, sendo necessário procedimentos e ferramentas próprias para lidar com elas. Além disso, ela serve para prover soluções a nível corporativo, auxiliando tomadas de decisão.

Diante disso, podemos afirmar que o SIG é mais adequado para soluções ou projetos isolados, enquanto os bancos de dados espaciais fornecem suporte espacial para tomada de decisões e gerenciamento de ativos.

Para empresas que já utilizam algum tipo de SIG, a adoção de um sistema de banco de dados é mais uma transição de tecnologia do que a implementação de uma nova tecnologia.

Yeung e Hall (2007). Spatial Database Systems.

Usando SQL no QGIS

O QGIS permite utilizar SQL de diferentes formas, tanto por meio do gerenciador de banco de dados quanto pelas camadas virtuais. Esse tipo de linguagem é utilizado para realizar consultas (queries) em grandes banco de dados de forma fácil e rápida.

Neste tutorial, estaremos utilizando SQL para criar camadas virtuais no QGIS 3.22. Começaremos usando o shapefile dos limites municipais (Malha Municipal) de Santa Catarina, disponível no site do IBGE [12/02/2022].

Após adicionar os shapefiles que você quer realizar uma consulta (ou aqueles sugeridos nesta postagem), você pode gerar uma camada virtual indo em Camada > Criar Nova Camada > Nova Camada Virtual. A figura seguinte mostra a janela que será aberta.

Janela para criação de camadas virtuais.
Janela para criação de camadas virtuais.

Nesta janela, nas camadas incorporadas, você pode adicionar os arquivos que você irá trabalhar. Mas você pode deixar em branco também, que funciona igual. Na parte de consulta, será onde iremos digitar os comandos SQL.

Neste primeiro código, vamos selecionar (SELECT) todas as colunas (por meio do asterisco *), do (FROM) shapefile Cidades (limite dos municípios) e iremos chamar, posteriormente nesta consulta, o shapefile Cidades de c. Por fim, vamos ordenar (ORDER BY) o resultado por meio da coluna CD_GEOCMU, de forma descrescente (DESC).

SELECT * FROM Cidades c ORDER BY c.CD_GEOCMU DESC

O resultado visual é o mesmo do shapefile Cidades, porém, se abrirmos a tabela de atributos, você verá que a ordem dos municípios foi alterada.

Agora, vamos utilizar WHERE (Onde) para filtrar nossos resultados obtidos. Vamos clicar com o botão direito sobre a camada virtual que já criamos e vamos editar a consulta já realizada (Editar Camada Virtual). Nossa intenção é obter o município de Florianópolis. A consulta abaixo demonstra como realizar esse procedimento.

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c WHERE c.NM_MUNICIP = 'FLORIANÓPOLIS'

Diferenciamos aqui um pouca da primeira consulta pois selecionamos apenas a coluna NM_MUNICIP e a geometria do shapefile. Caso você não selecione a geometria, você terá como resultado somente a tabela de atributos.

Podemos também selecionar vários municipíos a partir de uma lista, conforme o código abaixo, usando o termo IN, seguido da lista entre parentêses.

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c 
WHERE c.NM_MUNICIP IN ('FLORIANÓPOLIS', 'CRICIÚMA', 'TUBARÃO', 'CHAPECÓ', 'LAGES', 'ITAJAÍ', 'JOINVILLE')

Agora vamos supor que queremos puxar somente as cidades que comecem com a letra C ou a letra X. Para isso, usaremos o comando LIKE.

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c 
WHERE c.NM_MUNICIP LIKE 'C%' OR 'X%'

Agora iremos utilizar um pouco de dados numéricos. O comando usado agora será o LENGTH, que irá retornar o número de caracteres, letras, na feição em análise. Vamos começar selecionando apenas os municípios com nomes pequenos, ou seja, com menos de 5 letras.

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c
WHERE LENGTH(c.NM_MUNICIP) <= 5

Você pode realizar diferentes consultas usando outros operadores como ‘Não Igual’ (<> ou !=); IS NULL (retorna valor se nulo); e NOT (inverte o resultado obtido).

Embora nosso shapefile não contenha esses dados, imagine uma tabela de atributos contendo dados de população, área, densidade demográfica, PIB, entre outros. Você pode realizar diferentes tipos de consultas para explorar os seus dados.

Você aprendeu um pouco como realizar consultas em apenas um shapefile. Teste outras consultas para praticar.

Agora vamos supor que você tenha um shapefile contendo os limites de bacias hidrográficas e queira saber quais municípios estão inseridos nelas? Como fazer?

Dados Espaciais e SQL

Para realizar análises espaciais no SQL, usaremos as funções ST, isto é, Spatial Tools (Ferramentas Espaciais). O shapefile das bacias hidrográficas (posteriormente chamado de bacias) que usaremos esta disponível no site do Inventário Florístico Florestal de Santa Catarina [12/02/2022].

Lembre-se que para esse tipo de análise, os shapefiles devem estar no mesmo sistema de coordenadas. Caso contrário, é possível que você obtenha uma camada vázia como resultado.

Começaremos usando a função st_intersection() para verificar as sobreposições entre as geometrias de nosso interesse. Neste caso, vamos selecionar apenas os municípios que estejam inseridos dentro da Bacia Hidrográfica do Rio Urussanga.

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c
WHERE st_intersects(c.geometry, (SELECT bh.geometry FROM bacias bh WHERE bh.BACIA = "Rio Urussanga")) = 1

Dentro da função st_intersects(), inserimos a geometria das cidades (c.geometry) e criamos uma nova consulta para selecionar apenas a bacia do Rio Urussanga. Como a função retorna verdadeiro (1) ou falso (0), precisamos inserir ao final da consulta do WHERE igual à 1. O resultado obtido pode ser visto na figura seguinte.

Consulta espacial para verificar os municipios dentro da bacia hidrográfica.
Consulta espacial para verificar os municipios dentro da bacia hidrográfica.

Outras funções similares são st_within() (geometrias que estão totalmente contidas na outra) e st_overlaps() (geometrias que se tocam considerando seus perímetros).

Também podemos avaliar a intersecção entre polígonos considerando os centróides das geometrias dos municípios. Para extrair o centróide de uma poligonal, usaremos a função st_centroid().

SELECT * FROM Cidades c
WHERE st_within(st_centroid(c.geometry), (SELECT bh.geometry FROM bacias bh WHERE bh.BACIA = "Rio Urussanga")) = 1

Além das análises que realizamos, também podemos criar novas geometrias. Vamos supor que queremos desenhar uma linha ligando as bacias hidrográficas do Rio Araranguá, Urussanga e Tubarão. Para isso, vamos utilizar as funções make_point() e make_line(), a qual também pode ser utilizada para gerar mapas de fluxo.

SELECT 
make_line(
	make_point(-49.5663,-28.8348),
	make_point(-49.2297,-28.6641),
	make_point(-49.1450,-28.2892))
FROM bacias b

Lembre-se que após gerar essa geometria, você terá que definir a projeção clicando sobre ela na lista de arquivos abertos, selecionar SRC da Camada e escolher. Existe a função ST_SetSRID(), mas por alguma razão, o meu QGIS esta dizendo que ela não existe.

Também podemos selecionar os municípios distantes de um certo ponto usando a função ST_Buffer().

SELECT c.NM_MUNICIP, c.geometry FROM Cidades c WHERE
st_intersects(st_buffer(make_point(-49.2297,-28.6641), 0.5), c.geometry) = 1

São muitas as análises que podem ser facilitadas e feitas usando SQL e com essa introdução, gostaríamos de facilitar o caminho para você. Caso você queira continuar avançando, confira as referências consultadas logo abaixo.

Referências Consultadas.

Eric Weber. 10 places to start your SQL journey. Disponível em <https://www.linkedin.com/posts/eric-weber-060397b7_data-datascience-sql-activity-6871768794340098050-Qh8u/>. Acesso em 12. fev. 2022.

Paulo Vitor. Como gerar mapa de fluxos automaticamente no QGIS. Disponível em <https://paulovitorweb.wordpress.com/2020/11/15/como-gerar-mapa-de-fluxos-automaticamente-no-qgis/>. Acesso em 12 fev. 2022.

PostGIS Manual. Disponível em <https://postgis.net/docs/index.html>. Acesso em 12 fev. 2022.

PostgreSQL Tutorial. Disponível em <https://www.postgresqltutorial.com/>. Acesso em 12 fev. 2022.

QGIS - Spatial Queries. Disponível em <https://docs.qgis.org/3.16/en/docs/training_manual/spatial_databases/spatial_queries.html>. Acesso em 12. fev. 2022.

YEUNG. A.K.W.; HALL, G.B. Spatial Database Systems. Springer. 2007. 555 pg.


Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".

Apostila Mapa de Localização Banner

Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de geoprocessamento, mineração e hidrologia. Busca soluções utilizando softwares como QGIS, R e Python.

Deixe um comentário

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