SkyProfile
SkyProfile es una aplicación de escritorio con PyQt5 para consultar el historial global de ADSBexchange para una o múltiples aeronaves, detectar vuelos de múltiples segmentos y exportar a KML/CSV/JSON/Excel con análisis enriquecidos (aeropuertos, rutas, segmentos horarios, indicativos, metadatos FAA).
Características principales
- Consulta por rango de fechas por ICAO hex; búsqueda opcional de cola/matrícula a través de la base de datos básica de aeronaves ADSBx.
- Detección robusta de segmentos (suelo → aire → suelo) con indicadores aire/suelo, heurísticas de altitud/velocidad respecto al suelo, permanencia en suelo de 90s, manejo de brechas de 20 minutos e historial de indicativos en vivo.
- Exportaciones (alternar por tipo): Puntos KML, Rutas KML 2D, Rutas KML 3D, Mapa de calor de aeropuertos KML (puntos blancos dimensionados por actividad), CSV, JSON, Resumen Excel.
- Modo por lotes con opción Consolidar informes: fusiona todas las aeronaves en un único conjunto de exportaciones fuera de línea (CSV/JSON/KML/Excel). Los archivos individuales se suprimen al consolidar.
- Coincidencia de aeropuertos (el más cercano dentro de 250 km; IDs sintéticos cuando no hay ninguno) reutilizada en KML y Excel.
- Consulta del registro FAA para aeronaves con matrícula N (base de datos local en
resources/faa_registry).
- Progreso en GUI con estado por fase; controles Ejecutar/Detener; icono de aplicación aplicado a la ventana/barra de tareas.
- Menú de configuración con "Buscar actualizaciones" (verificación de etiqueta de GitHub) y "Acerca de" (versión/info + atribuciones de datos).
Modo por lotes
- Entrada: CSV con columna
icao_hex (o hex/icao) y/o tail/registration. Cada fila es un objetivo de aeronave.
- Comportamiento:
- Ejecuta todas las aeronaves listadas en el rango de fechas elegido.
- Escribe salidas por aeronave en
output/<HEX>_<TAIL>/ (solo hex si falta cola).
- Opcionalmente Consolidar informes: cuando está activado, suprime archivos individuales y produce un único conjunto fusionado:
consolidated_<N>ACFT_<inicio>_<fin>.csv/.json (todos los hits/cargas JSON)
- KMLs consolidados (puntos, rutas, rutas 3D, mapa de calor de aeropuertos) fusionados en línea para visualización sin conexión
- Resumen Excel consolidado con las mismas pestañas/gráficos que una ejecución normal, combinando todos los vuelos
- Caché: las descargas de ADSBx aún almacenan en caché por aeronave/día en
output/cache/<hex>/YYYY-MM-DD.json.
Instalación / Ejecución
Desde el código fuente
pip install PyQt5 requests simplekml openpyxl lxml numpy
python skyprofile.py
EXE empaquetado (Windows)
- Use
dist/SkyProfile.exe con dist/resources/ al lado (contiene datos FAA/aeropuerto/acdb).
Exportaciones y normalización
- Detección de segmentos: indicadores suelo/aire, comprobaciones de altitud/GS, permanencia en suelo de 90s, aterrizaje por brecha de 20 minutos, promedio de clústeres en suelo, historial de indicativos por segmento.
- Puntos KML: un placemark por llegada de segmento con horas, duración, indicativo, meta.
- Rutas KML 2D/3D: trayectorias completas de segmentos (no líneas rectas); las rutas 3D incluyen altitud.
- Mapa de calor de aeropuertos KML: un marcador por aeropuerto visitado, dimensionado por visitas totales (llegadas+salidas) y coloreado en blanco para una superposición limpia; los atributos incluyen fechas de llegada/salida, hex, cola.
- CSV: una fila por hit; las columnas incluyen hex y cola más
ac_data aplanado (sin columna ac_data_json sin procesar).
- JSON: carga envuelta por aeronave:
{ hex, tail, meta, data: [blobs trace_full sin procesar] }; el JSON consolidado es una lista de esas cargas.
- Resumen Excel (libro completo de varias hojas):
Summary: Metadatos (hex, registro, tipo, propietario, modelo, banderas, rango de fechas); detalles de FAA cuando estén disponibles.
Flights: una fila por segmento detectado; columnas para hex, cola, id de segmento, marcas de tiempo UTC de salida/llegada, duración, IDs y nombres de aeropuerto de salida/llegada, lat/lon, segmentos de día de semana/día de mes/hora, indicativo e historial.
Airports: principales aeropuertos por visitas (llegadas + salidas) con IDs, ICAO/IATA, nombre, ciudad/país, recuentos, lat/lon; incluye gráfico de barras “Aeropuertos por Número de Visitas”.
Routes: rutas principales con etiquetas de aeropuerto legibles y recuentos; incluye gráfico de barras “Recuento de Rutas Recorridas”.
DayOfWeek: recuentos por día de la semana con gráfico de barras.
DayOfMonth: recuentos por día del mes con gráfico de barras.
Hours: despegues vs aterrizajes por hora UTC con un gráfico de barras de serie dual (Despegues azul, Aterrizajes naranja).
Countries: visitas por país con gráfico de barras.
Callsigns: recuentos de uso de indicativos.
- Los gráficos usan fondos blancos, ejes Y enteros con cuadrícula sensata (cada 10 o 100 para recuentos grandes) y etiquetas de valor en las barras.
Recursos y almacenamiento en caché
- Los datos compartidos residen en
resources/ (acdb_cache, airport_db, faa_registry). Las compilaciones de PyInstaller lo incluyen mediante --add-data y lo copian junto al EXE.
- La caché de trazas ADSBx permanece en
output/cache/<hex>/YYYY-MM-DD.json.
- Las exportaciones por aeronave se agrupan en
output/<HEX>_<TAIL>/ (o solo hex si no hay cola). Las exportaciones consolidadas por lotes usan consolidated_<N>ACFT_<rango de fechas>* en la carpeta principal output/.
Notas y limitaciones
- Las brechas de cobertura pueden perder momentos exactos en tierra; la coincidencia de aeropuerto más cercano puede recurrir a IDs sintéticos
LL_lat_lon.
- Las fotos están deshabilitadas en Excel para evitar dibujos corruptos.
- El EXE de un solo archivo es grande porque empaqueta Python + Qt + dependencias; use un solo directorio si necesita un EXE más pequeño.
Licencia
- Licencia Apache 2.0 (ver
LICENSE). Los datos/API externos permanecen bajo sus propios términos.