Python no QGIS com IA (Chat GPT): Automação Simples para Iniciantes

Se você já tem um conhecimento básico de Python e IA, esse post vai ser muito útil para você. O objetivo aqui é automatizar uma tarefa que pode levar muito tempo para ser executada apenas com as ferramentas disponíveis do QGIS.

No exemplo do post, vamos elaborar um script em Python utilizando o ChatGPT para fazer a seleção e exportação de uma base de dados pesada, a hidrografia do Paraná, a partir do recorte da RMC – Região Metropolitana de Curitiba.

Entendendo a lógica, você será capaz de elaborar seus próprios scripts e ganhar mais tempo para o que é realmente relevante.

Quer sair do zero e elaborar mapas completos e complexos, com dados e informações organizadas e legíveis em um curso de apenas 6h?

Vá até a página bases de dados aqui da Qualimapas e procure o link do GeoParaná, clique na opção de catálogo de dados e metadados e encontre a base Hidrografia Ottocodificada – Trecho de Drenagem (2020):

GeoPR - Hidrografia

O formato disponível para download é em GDB – Geodatabase. Faça o download e extraia a pasta que vem comprimida em formato .rar. Carregue a base no QGIS usando o formato ‘Diretório’, tipo ‘Arquivo aberto GDB’:

Carregar GDB - Geodatabase

Carregue também a camada que será interseccionada com a camada principal, aqui no exemplo são os municípios da RMC:

Hidrografia PR e RMC

Com as duas camadas carregadas, vamos elaborar o script no ChatGPT. No prompt de comando seja claro e objetivo, por exemplo:

“Escreva um script para utilizar no terminal Python no QGIS.
Objetivo: diminuir o tempo de seleção e exportação em formato Geopackage com muitas informações.
Função: selecionar feições e exportar de uma camada interseccionada por outra.
Código: coloque o máximo de explicações possível”

O ChatGPT vai escrever o código e dar algumas explicações de como usar:

Código gerado pelo ChatGPT

Copie o código e cole em algum notebook de sua preferência, para isso eu uso o Mu Editor, bem simples e menos burocrático que outros. Salve o código em formato .py (Python):

Mu Editor

Para rodar o script vamos abrir o terminal no menu de complementos:

Abrir o terminal Python

Ao abrir o terminal clique no ícone ‘Mostrar editor’, irá aparecer uma caixa de texto ao lado do terminal:

Terminal Pyhton

Agora clique no ícone de ‘Abrir script’ e procure o código salvo em formato .py; ele irá aparecer na caixa de texto:

Abrir script

Leia o código e localize onde você deve digitar os valores das variáveis de acordo com os nomes das camadas do seu projeto.

Aqui no exemplo foram atribuídos os valores para a camada de entrada, a de intersecção e a saída:

Substituir variáveis

Coloque o código para rodar clicando no ícone da seta verde, caso ocorra algum erro, copie o erro do terminal e cole no ChatGPT para que ele resolva. Pode ser necessário salvar o código e abrir novamente. 

O resultado é esse:

Vou deixar aqui o código que deu certo e que já usei para recortar outras informações como curvas de nível:

import qgis.core
import qgis.utils
import processing
import os # Importa o módulo os para manipulação de caminhos de arquivo

def selecionar_e_exportar_por_localizacao(nome_camada_principal, nome_camada_selecao, caminho_saida_gpkg):

# 1. Obter as camadas do projeto QGIS atual
# QgsProject.instance().mapLayersByName() retorna uma lista, pegamos o primeiro elemento [0]
camadas_principais = QgsProject.instance().mapLayersByName(nome_camada_principal)
camadas_selecao = QgsProject.instance().mapLayersByName(nome_camada_selecao)

if not camadas_principais:
print(f”ERRO: Camada principal ‘{nome_camada_principal}’ não encontrada no projeto QGIS.”)
qgis.utils.iface.messageBar().pushMessage(
“Erro”, f”Camada principal ‘{nome_camada_principal}’ não encontrada.”, level=Qgis.Critical
)
return

if not camadas_selecao:
print(f”ERRO: Camada de seleção ‘{nome_camada_selecao}’ não encontrada no projeto QGIS.”)
qgis.utils.iface.messageBar().pushMessage(
“Erro”, f”Camada de seleção ‘{nome_camada_selecao}’ não encontrada.”, level=Qgis.Critical
)
return

camada_principal = camadas_principais[0]
camada_selecao = camadas_selecao[0]

print(f”Iniciando processo para ‘{nome_camada_principal}’ usando ‘{nome_camada_selecao}’…”)
qgis.utils.iface.messageBar().pushMessage(
“Info”, f”Iniciando seleção por localização…”, level=Qgis.Info
)

# 2. Limpar qualquer seleção existente na camada principal
# Isso garante que a seleção seja feita do zero
camada_principal.removeSelection()
print(f”Seleção existente na camada ‘{nome_camada_principal}’ limpa.”)

# 3. Realizar a seleção por localização usando o algoritmo ‘Select by location’
# ‘PREDICATE’: 0 significa ‘intersects’ (intersecta). Você pode mudar para outros:
# 0: intersects (intersecta)
# 1: contains (contém)
# 6: within (dentro de) – se a geometria da camada principal estiver inteiramente dentro da de seleção
# ‘METHOD’: 0 significa ‘create new selection’ (criar nova seleção)
try:
processing.run(“native:selectbylocation”, {
‘INPUT’: camada_principal,
‘PREDICATE’: 0, # Use 0 para ‘intersects’
‘INTERSECT’: camada_selecao,
‘METHOD’: 0
})
print(“Seleção por localização concluída.”)

selected_count = camada_principal.selectedFeatureCount()
if selected_count == 0:
print(“Nenhuma feição foi selecionada pela localização. Verifique as geometrias e camadas.”)
qgis.utils.iface.messageBar().pushMessage(
“Aviso”, “Nenhuma feição selecionada. Verifique as camadas.”, level=Qgis.Warning
)
camada_principal.removeSelection() # Garante que não haja seleção residual
return
else:
print(f”{selected_count} feições selecionadas na camada ‘{nome_camada_principal}’.”)
qgis.utils.iface.messageBar().pushMessage(
“Sucesso”, f”{selected_count} feições selecionadas.”, level=Qgis.Success
)

# 4. Exportar as feições selecionadas para um novo arquivo GeoPackage
print(f”Exportando {selected_count} feições para ‘{caminho_saida_gpkg}’…”)
qgis.utils.iface.messageBar().pushMessage(
“Info”, f”Exportando feições selecionadas…”, level=Qgis.Info
)

# Garante que o diretório de saída exista
output_dir = os.path.dirname(caminho_saida_gpkg)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
print(f”Diretório de saída criado: {output_dir}”)

processing.run(“native:saveselectedfeatures”, {
‘INPUT’: camada_principal,
‘OUTPUT’: caminho_saida_gpkg
})

print(f”Exportação concluída com sucesso! O arquivo salvo em: {caminho_saida_gpkg}”)
qgis.utils.iface.messageBar().pushMessage(
“Sucesso”, f”Feições exportadas para {os.path.basename(caminho_saida_gpkg)}”, level=Qgis.Success
)

# 5. Opcional: Adicionar a nova camada exportada ao projeto QGIS
nova_camada = QgsVectorLayer(caminho_saida_gpkg, f”{nome_camada_principal}_selecionada”, “ogr”)
if not nova_camada.isValid():
print(f”AVISO: Não foi possível carregar a camada exportada no projeto: {caminho_saida_gpkg}”)
else:
QgsProject.instance().addMapLayer(nova_camada)
print(f”Nova camada ‘{nova_camada.name()}’ adicionada ao projeto.”)

except Exception as e:
print(f”OCORREU UM ERRO DURANTE A EXECUÇÃO DO SCRIPT: {e}”)
qgis.utils.iface.messageBar().pushMessage(
“Erro”, f”Erro durante a execução do script: {e}”, level=Qgis.Critical
)
finally:
# 6. Limpar a seleção na camada original após todo o processo (boa prática)
camada_principal.removeSelection()
print(“Seleção limpa na camada original.”)

# — Como usar o script —
# Altere os valores abaixo conforme suas camadas e o local de saída desejado:
# Exemplo:
# — Como usar o script —
# Altere os valores abaixo conforme suas camadas e o local de saída desejado:

selecionar_e_exportar_por_localizacao(
nome_camada_principal = ‘ana_hidrografia’, # Nome exato da sua camada de hidrografia no QGIS
nome_camada_selecao = ‘iat_rmc’, # Nome exato da sua camada de intersecção no QGIS
caminho_saida_gpkg = ‘/Users/AnabelliSimoes/Documents/Campo Magro/VETORES/iat_curvas_recorte.gpkg’ # Caminho COMPLETO do arquivo de saída
)

# Chame a função com seus parâmetros
# selecionar_e_exportar_por_localizacao(
# nome_camada_principal = ‘hidrografia_PR’,
# nome_camada_selecao = ‘municipio_selecao’,
# caminho_saida_gpkg = ‘C:/QGIS_Projetos/dados_cortados/hidrografia_municipio.gpkg’
# )

Vídeo aula

Veja o passo-a-passo de como criar seu script e automatizar tarefas que poderiam levar horas ou ainda travar seu aplicativo QGIS:

Deixe um comentário

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

Consentimento de cookies conforme o RGPD com Real Cookie Banner