7  Parte V - Estudos de caso

7.1 25. GPX Batch Converter

Repositório: https://github.com/Jubilio/gpx-batch-converter

Plugin oficial: https://plugins.qgis.org/plugins/gpx_batch_converter/

Fluxo do GPX Batch Converter

7.1.1 25.1 Problema original

Converter centenas de ficheiros GPX manualmente, camada por camada, cria atrasos, nomes inconsistentes e perda de rastreabilidade. A primeira versão automatizou a conversão de waypoints, routes, route_points, tracks e track_points.

7.1.2 25.2 Arquitectura

gpx_batch_converter/
├── __init__.py          -> classFactory()
├── plugin.py            -> menu, toolbar e ciclo de vida
├── dialog.py            -> interface, validação e apresentação
├── conversion_task.py   -> QgsTask, GDAL, cancelamento e resultados
├── metadata.txt
├── icon.png
├── LICENSE
└── README.md

Esta separação permite testar funções de conversão sem instanciar toda a interface.

7.1.3 25.3 Evolução funcional

7.1.3.1 Fase 1 - lote básico

  • pastas de entrada e saída;
  • subcamadas seleccionáveis;
  • overwrite;
  • adicionar resultados ao projecto;
  • progresso e resumo.

7.1.3.2 Fase 2 - fusão e proveniência

  • um output por tipo de camada;
  • prefixo configurável;
  • campos source_file, source_path e source_layer;
  • camadas ausentes separadas de erros.

7.1.3.3 Fase 3 - produto profissional

  • Shapefile, GeoPackage, GeoJSON, KML e CSV/WKT;
  • painel de resultados;
  • relatório CSV;
  • QGIS Task Manager;
  • cancelamento;
  • interface responsiva.

7.1.3.4 Fase 4 - segurança e publicação

  • caminhos absolutos de GDAL;
  • shell=False;
  • argumentos validados;
  • remoção de SQL dinâmico;
  • metadata completa;
  • compatibilidade QGIS 3.28-4.99 e Qt 6;
  • aprovação no repositório oficial.

7.1.4 25.4 Lições

  1. Diferencie ausência esperada de falha.
  2. Uma operação demorada precisa de tarefa, progresso e cancelamento.
  3. Dados fundidos precisam de proveniência.
  4. Processos externos exigem validação de segurança.
  5. Relatórios estruturados são mais úteis que uma caixa final.

7.2 26. GeoClick Capture

Repositório: https://github.com/Jubilio/qgis-latlon

Release usada no estudo: v1.2.6.

7.2.1 26.1 Problema e reposicionamento

A primeira ideia concentrava-se em coordenadas, uma área já coberta por plugins maduros. O projecto foi redefinido como uma ferramenta de log auditável para verificação de campo, revisão cartográfica e controlo de qualidade GIS.

Essa decisão ilustra um princípio importante: uma boa alteração de produto pode ser mais valiosa que adicionar funcionalidades.

7.2.2 26.2 Registo de auditoria

Cada captura pode armazenar:

session_id
captured_at
operator
category
status
note
lat / lon
map_x / map_y
project_crs
project_name
map_scale
source_layer
source_layer_id
source_feature_id
location
snapped
snap_type
snap_distance

7.2.3 26.3 Evolução

7.2.3.1 Base

  • clique no mapa;
  • WGS 84;
  • camada temporária;
  • exportação.

7.2.3.2 Painel Capture Log

  • sessão;
  • operador, categoria, estado e nota;
  • QgsMapLayerComboBox;
  • tabela de registos;
  • undo, delete e clear;
  • CSV, GeoJSON e GeoPackage;
  • preferências persistentes.

7.2.3.3 Precisão espacial

  • snapping do projecto;
  • fallback automático para vértices;
  • fallback para segmentos;
  • tolerância em pixels;
  • campos de auditoria.

7.2.3.4 Rede

  • QgsNetworkAccessManager;
  • cache;
  • um pedido por segundo;
  • timeout;
  • redireccionamentos seguros;
  • diagnóstico HTTP/SSL/DNS/proxy;
  • fallback de endereço para área administrativa;
  • captura independente da rede.

7.2.3.5 Compatibilidade e qualidade

  • enums Qt 6 scoped;
  • fallbacks Qt 5;
  • testes AST;
  • ícones SVG específicos;
  • GitHub Actions e release automatizada.

7.2.4 26.4 Lições

  1. O CRS do mapa não é necessariamente WGS 84.
  2. Interface persistente favorece QDockWidget.
  3. Snapping deve ser previsível e auditável.
  4. Serviço externo não deve comprometer a função principal.
  5. Validadores podem analisar ficheiros que não são executados directamente; mantenha todo o pacote compatível.

7.3 27. Comparação dos dois padrões

Os dois plugins partilham o mesmo ciclo de vida QGIS, metadata, disciplina de empacotamento e preocupação com Qt 6. A diferença está no centro da arquitectura: o GPX Batch Converter organiza uma operação de lote; o GeoClick Capture mantém uma sessão interactiva no mapa. A tabela seguinte resume as decisões principais.

Interacção principal

  • GPX Batch Converter: ficheiros e operação de lote.
  • GeoClick Capture: clique no mapa e sessão interactiva.

Interface

  • GPX Batch Converter: QDialog, adequado a uma tarefa com início e fim definidos.
  • GeoClick Capture: QDockWidget, adequado a trabalho contínuo enquanto o mapa permanece visível.

Processamento e dependências

  • GPX Batch Converter: usa QgsTask para operações longas e integra ferramentas GDAL/OGR disponibilizadas pelo ambiente QGIS.
  • GeoClick Capture: executa sobretudo interacções curtas; a dependência externa principal é a geocodificação reversa opcional.

Geometria e estado

  • GPX Batch Converter: lê, converte e combina geometrias, mantendo opções e resultados do lote.
  • GeoClick Capture: cria pontos, transforma CRS, aplica snapping e mantém sessão, camada e preferências.

Saídas e risco central

  • GPX Batch Converter: produz múltiplos formatos; os principais riscos são bloqueio da interface, subprocessos e tratamento incompleto de lotes.
  • GeoClick Capture: produz uma camada auditável e exportações; os principais riscos são CRS, snapping, rede e compatibilidade Qt.

A arquitectura ideal depende do tipo de problema. Não copie uma estrutura inteira sem compreender as necessidades.