6.8 KiB
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 | 0° | 360° |
| VIS | 0 dam | 9999 dam |
| TETO | 0 dam | 9999 dam |
| PREC | 0 mm | 500 mm |
Limitações conhecidas
-
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.
-
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.
-
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.
-
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).
-
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.
-
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.
-
Processamento sequencial. A coleta é executada para um aeródromo por vez. Não há paralelização da coleta de múltiplos aeródromos.
-
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.