Files
kolmeasi e5aa85fe9f V.1.0
2026-06-01 14:21:31 -03:00

6.8 KiB
Raw Permalink Blame History

Documentação Técnica — Meteorologia de Superfície

O que é

Sistema de coleta, processamento e visualização de dados meteorológicos horários de aeródromos brasileiros. Os dados são extraídos do portal de dados de superfície do ICEA/DECEA, armazenados em um banco SQLite local e disponibilizados em um dashboard interativo para análise de séries temporais, climatologia e condições operacionais de voo.

O sistema foi desenvolvido como parte de projeto de pesquisa no IED/ITA.


Fonte dos dados

Portal: https://pesquisa.icea.decea.mil.br/superficie_list/ Órgão: ICEA — Instituto de Controle do Espaço Aéreo / DECEA — Departamento de Controle do Espaço Aéreo Tipo: Observações meteorológicas de superfície de aeródromos brasileiros

Os dados são organizados no portal em 9 abas temáticas por período trimestral:

Aba Conteúdo
CGT Dados corrigidos de superfície (conjunto)
Nuvem Cobertura e tipo de nuvem
Precipitação Intensidade e duração da chuva
Pressão QNH e pressão de superfície
RVR Alcance visual de pista por cabeceira
Temperatura Bulbo seco, orvalho, umidade por pista
Teto Teto de nuvens por pista
Vento Velocidade, rajada e direção por cabeceira
Visibilidade Visibilidade predominante

A cobertura histórica varia por aeródromo. Os três aeródromos com dados carregados no banco na versão inicial são:

ICAO Aeródromo Início do histórico
SBGR Guarulhos / Cumbica (SP) 1951
SBAN Santos (SP) 1973
SBCC Campinas / Viracopos (SP) 1992

Como funciona

O fluxo completo é orquestrado pelo módulo pipeline.py:

1. Verifica cobertura existente no banco (db.get_coverage)
2. Passe forward  — baixa dados novos após a data máxima existente
3. Passe backward — baixa histórico anterior à data mínima existente
4. Concatena os CSVs trimestrais por aba (concat_meteorologia)
5. Deriva as 10 variáveis analíticas (build_analytics)
6. Persiste no SQLite com validação de limites físicos (db.upsert_analytics)
7. Salva CSV de backup em tabelas/preproc/meteorologia_aeroportos/<ICAO>/
8. Valida por amostragem contra os arquivos fonte
9. Remove os CSVs temporários (se validação aprovada e --cleanup ativo)

Derivação das variáveis analíticas

As 84+ colunas brutas (uma por medição específica, por pista ou cabeceira) são reduzidas a 10 variáveis float por timestamp:

Variável Derivação
T Média das colunas de temperatura de bulbo seco
Td Média das colunas de ponto de orvalho
UR Média das colunas de umidade relativa
QNH Coluna genérica de QNH ou agregação das específicas
WS Média das velocidades de vento por cabeceira
WG Máximo das rajadas por cabeceira
WD Média da direção do vento
VIS Mínimo da visibilidade predominante
TETO Mínimo do teto por pista (conservador)
PREC Soma da precipitação acumulada

Limites físicos aplicados

Valores fora dos intervalos abaixo são substituídos por NULL e registrados em outlier_log:

Variável Mínimo Máximo
T 25 °C 55 °C
Td 30 °C 40 °C
UR 0 % 100 %
QNH 940 hPa 1060 hPa
WS 0 kt 200 kt
WG 0 kt 250 kt
WD 360°
VIS 0 dam 9999 dam
TETO 0 dam 9999 dam
PREC 0 mm 500 mm

Limitações conhecidas

  1. Extração via web scraping, não via API oficial. O sistema automatiza interações de navegador (Selenium + Chrome). Qualquer alteração no layout, estrutura HTML ou comportamento JavaScript do portal ICEA pode interromper a coleta sem aviso prévio.

  2. Fonte única e exclusiva. Os dados provêm exclusivamente da tabela de dados de superfície do portal https://pesquisa.icea.decea.mil.br/superficie_list/. Não há integração com METAR, SYNOP, REDEMET, SPECI, SIGMET, ou qualquer outra fonte meteorológica ou aeronáutica.

  3. Sem tratamento de erros de lançamento. Os dados são replicados como estão no portal. Erros de digitação, transcrição incorreta ou valores biologicamente implausíveis mas dentro dos limites físicos definidos não são detectados nem corrigidos. A qualidade dos dados depende integralmente da fonte.

  4. Limites físicos são condição necessária, não suficiente. Os filtros removem valores meteorologicamente impossíveis (ex: temperatura de 500 °C), mas não detectam erros plausíveis dentro dos limites (ex: QNH de 1010 hPa registrado incorretamente como 1001 hPa).

  5. Dependência de hardware e software local. A coleta requer Google Chrome instalado. A performance e o sucesso da coleta dependem de conexão com a internet, versão do Chrome, e disponibilidade do portal.

  6. Cobertura histórica variável. Nem todos os aeródromos possuem histórico completo. A disponibilidade de dados depende do que foi inserido no portal — aeródromos mais antigos ou de menor porte podem ter lacunas significativas.

  7. Processamento sequencial. A coleta é executada para um aeródromo por vez. Não há paralelização da coleta de múltiplos aeródromos.

  8. Sem atualização automática. A coleta de dados novos deve ser iniciada manualmente pelo usuário, seja via dashboard ou via linha de comando.


Oportunidades de melhoria

Prioridade Melhoria
Alta Agendamento automático da coleta (cron / Task Scheduler)
Alta Notificação de falha na coleta (e-mail, webhook)
Alta Coleta paralela de múltiplos aeródromos
Média Integração com REDEMET / METAR para validação cruzada
Média Detecção de anomalias por métodos estatísticos (z-score, IQR)
Média API REST sobre o banco SQLite para consumo programático
Média Suporte a dados SYNOP e SPECI do portal
Baixa Exportação em formatos científicos (NetCDF, HDF5, Parquet)
Baixa Interface de configuração de alertas por variável e limiar
Baixa Mapa de cobertura dos aeródromos disponíveis

Solução de problemas

Chrome não encontrado / erro de WebDriver: Verifique se o Google Chrome está instalado. O webdriver-manager baixa o ChromeDriver compatível automaticamente — é necessária conexão com a internet.

Portal ICEA indisponível ou com layout alterado: A coleta depende da estrutura HTML do portal. Se o portal alterar sua interface, o scraper pode parar de funcionar. Verifique o portal manualmente e abra uma issue no repositório.

Dashboard não abre / porta ocupada:

streamlit run _apps/dashboard.py --server.port 8502

Banco de dados não encontrado: Execute o pipeline ao menos uma vez para criar e popular db/met.db.