SkyProfile
SkyProfile est une application de bureau PyQt5 permettant d'interroger l'historique ADSBexchange globe pour un ou plusieurs aéronefs, de détecter les vols multi-tronçons et d'exporter en KML/CSV/JSON/Excel avec des analyses riches (aéroports, routes, tranches horaires, indicatifs, métadonnées FAA).
Fonctionnalités clés
- Requête par plage de dates via l'hexadécimal ICAO ; recherche facultative par indicatif/immatriculation via la base de données de base ADSBx.
- Détection robuste des tronçons (sol → air → sol) avec indicateurs air/sol, heuristiques d'altitude/vitesse sol, temps au sol de 90 s, gestion des interruptions de 20 minutes et historique des indicatifs en direct.
- Exports (activables par type) : Points KML, Routes KML 2D, Routes KML 3D, Carte de chaleur des aéroports KML (points blancs dimensionnés selon l'activité), CSV, JSON, Résumé Excel.
- Mode lot avec option Consolider les rapports : fusionne tous les aéronefs en un ensemble unique d'exports hors ligne (CSV/JSON/KML/Excel). Les fichiers individuels sont supprimés lors de la consolidation.
- Correspondance d'aéroports (le plus proche dans un rayon de 250 km ; identifiants synthétiques en l'absence de correspondance) réutilisée dans KML et Excel.
- Recherche dans le registre FAA pour les aéronefs à immatriculation N (base de données locale dans
resources/faa_registry).
- Progression GUI avec statut par phase ; commandes Exécuter/Arrêter ; icône d'application appliquée à la fenêtre/barre des tâches.
- Menu Paramètres avec « Rechercher des mises à jour » (vérification de tag GitHub) et « À propos » (version/informations + attributions des données).
Mode lot
- Entrée : CSV avec colonne
icao_hex (ou hex/icao) et/ou tail/registration. Chaque ligne correspond à un aéronef cible.
- Comportement :
- Exécute tous les aéronefs listés sur la plage de dates choisie.
- Écrit les sorties par aéronef dans
output/<HEX>_<TAIL>/ (hex uniquement si l'immatriculation manque).
- Optionnellement Consolider les rapports : lorsqu'activé, supprime les fichiers individuels et produit un ensemble fusionné unique :
consolidated_<N>ACFT_<start>_<end>.csv/.json (tous les hits/payloads JSON)
- KML consolidés (points, routes, routes 3D, carte de chaleur des aéroports) fusionnés en ligne pour une visualisation hors ligne
- Résumé Excel consolidé avec les mêmes onglets/graphiques qu'une exécution normale, combinant tous les vols
- Cache : les téléchargements ADSBx restent mis en cache par aéronef/jour sous
output/cache/<hex>/YYYY-MM-DD.json.
Installation / Exécution
Depuis les sources
pip install PyQt5 requests simplekml openpyxl lxml numpy
python skyprofile.py
EXE empaqueté (Windows)
- Utilisez
dist/SkyProfile.exe avec dist/resources/ à côté (contient les données FAA/aéroports/acdb).
Exports et normalisation
- Détection des tronçons : indicateurs sol/air, contrôles altitude/VS, temps au sol de 90 s, atterrissage après interruption de 20 minutes, moyenne des clusters au sol, historique des indicatifs par tronçon.
- Points KML : Un repère par tronçon d'arrivée avec heures, durée, indicatif, métadonnées.
- Routes KML 2D/3D : Trajectoires complètes des tronçons (pas des lignes droites) ; les routes 3D incluent l'altitude.
- Carte de chaleur des aéroports KML : Un marqueur par aéroport visité, dimensionné selon le nombre total de visites (arrivées+départs) et coloré en blanc pour un overlay propre ; les attributs incluent les dates d'arrivée/départ, l'hex, l'immatriculation.
- CSV : Une ligne par hit ; les colonnes incluent hex et immatriculation plus
ac_data aplati (pas de colonne brute ac_data_json).
- JSON : Payload enveloppé par aéronef :
{ hex, tail, meta, data: [blobs bruts trace_full] } ; le JSON consolidé est une liste de ces payloads.
- Résumé Excel (classeur multi-feuilles complet) :
Summary : Métadonnées (hex, immatriculation, type, propriétaire, modèle, indicateurs, plage de dates) ; détails FAA lorsqu'ils sont disponibles.
Flights : Une ligne par tronçon détecté ; colonnes pour hex, immatriculation, identifiant de segment, horodatages UTC dép/arr, durée, identifiants et noms des aéroports dép/arr, lat/lon, tranches jour-de-la-semaine/jour-du-mois/heure, indicatif et historique.
Airports : Principaux aéroports par visites (arrivées + départs) avec identifiants, OACI/IATA, nom, ville/pays, compteurs, lat/lon ; inclut le graphique en barres « Airports by Number of Visits ».
Routes : Principales routes avec libellés d'aéroports lisibles et compteurs ; inclut le graphique en barres « Count of Routes Traveled ».
DayOfWeek : Comptages par jour de la semaine avec graphique en barres.
DayOfMonth : Comptages par jour du mois avec graphique en barres.
Hours : Décollages vs atterrissages par heure UTC avec un graphique en barres à deux séries (décollages en bleu, atterrissages en orange).
Countries : Visites par pays avec graphique en barres.
Callsigns : Comptages d'utilisation des indicatifs.
- Les graphiques utilisent des fonds blancs, des axes Y entiers avec une grille sensée (tous les 10 ou 100 pour les grands comptages) et des étiquettes de valeurs sur les barres.
Ressources et cache
- Les données partagées se trouvent dans
resources/ (acdb_cache, airport_db, faa_registry). Les builds PyInstaller les incluent via --add-data et les copient à côté de l'EXE.
- Le cache des traces ADSBx reste sous
output/cache/<hex>/YYYY-MM-DD.json.
- Les exports par aéronef sont regroupés sous
output/<HEX>_<TAIL>/ (ou hex uniquement si pas d'immatriculation). Les exports batch consolidés utilisent consolidated_<N>ACFT_<plage de dates>* dans le dossier principal output/.
Notes et limites
- Les lacunes de couverture peuvent encore manquer les heures de sol exactes ; la correspondance avec l'aéroport le plus proche peut revenir à des identifiants synthétiques
LL_lat_lon.
- Les photos sont désactivées dans Excel pour éviter les dessins corrompus.
- L'EXE Onefile est volumineux car il regroupe Python + Qt + dépendances ; utilisez one-dir si vous avez besoin d'un EXE plus petit.
Licence
- Licence Apache 2.0 (voir
LICENSE). Les données/API externes restent soumises à leurs propres conditions.