SkyProfile
SkyProfile — это настольное приложение на PyQt5 для запросов глобальной истории ADSBexchange по одному или нескольким воздушным судам, обнаружения многоэтапных рейсов и экспорта в KML/CSV/JSON/Excel с расширенной аналитикой (аэропорты, маршруты, временные интервалы, позывные, метаданные FAA).
Ключевые возможности
- Запрос за диапазон дат по ICAO hex; необязательный поиск бортового номера/регистрации через базовую БД воздушных судов ADSBx.
- Надёжное обнаружение этапов (земля → воздух → земля) с флагами воздух/земля, эвристикой по высоте/путевой скорости, 90-секундным пребыванием на земле, обработкой 20-минутных разрывов и историей позывных в реальном времени.
- Экспорт (переключается по типу): точки KML, маршруты KML 2D, маршруты KML 3D, тепловая карта аэропортов KML (белые точки, размер которых зависит от активности), CSV, JSON, сводка Excel.
- Пакетный режим с опциональной консолидацией отчётов: объединяет все воздушные суда в единый набор офлайн-экспортов (CSV/JSON/KML/Excel). При консолидации отдельные файлы не создаются.
- Сопоставление аэропортов (ближайший в пределах 250 км; синтетические ID при их отсутствии) повторно используется в KML и Excel.
- Поиск по реестру FAA для воздушных судов с N-номерами (локальная БД в
resources/faa_registry).
- Индикатор выполнения в GUI со статусом по фазам; элементы управления «Запуск/Остановка»; значок приложения в окне/на панели задач.
- Меню настроек с пунктами «Проверить обновления» (проверка тегов GitHub) и «О программе» (версия/информация + атрибуция данных).
Пакетный режим
- Входные данные: CSV с колонкой
icao_hex (или hex/icao) и/или tail/registration. Каждая строка — одно целевое воздушное судно.
- Поведение:
- Обрабатывает все перечисленные воздушные суда за выбранный диапазон дат.
- Записывает выходные данные по каждому судну в
output/<HEX>_<TAIL>/ (только hex, если бортовой номер отсутствует).
- Опционально консолидация отчётов: при включении отдельные файлы не создаются, а формируется единый объединённый набор:
consolidated_<N>ACFT_<start>_<end>.csv/.json (все записи/JSON-полезные нагрузки)
- Объединённые KML (точки, маршруты, 3D-маршруты, тепловая карта аэропортов), сведённые в один файл для офлайн-просмотра
- Консолидированная сводка Excel с теми же вкладками/диаграммами, что и при обычном запуске, объединяющая все рейсы
- Кэширование: загрузки ADSBx по-прежнему кэшируются по судну/дню в
output/cache/<hex>/YYYY-MM-DD.json.
Установка / Запуск
Из исходного кода
pip install PyQt5 requests simplekml openpyxl lxml numpy
python skyprofile.py
Готовый EXE (Windows)
- Используйте
dist/SkyProfile.exe с расположенным рядом dist/resources/ (содержит данные FAA/аэропортов/acdb).
Экспорт и нормализация
- Обнаружение этапов: флаги земля/воздух, проверки высоты/путевой скорости, 90-секундное пребывание на земле, посадка при 20-минутном разрыве, усреднение наземных кластеров, история позывных по каждому этапу.
- Точки KML: одна метка на прибытие этапа с временем, длительностью, позывным и метаданными.
- Маршруты KML 2D/3D: полные треки этапов (не прямые линии); 3D-маршруты включают высоту.
- Тепловая карта аэропортов KML: один маркер на посещённый аэропорт, размер зависит от общего числа посещений (прибытия + вылеты), белый цвет — для чистого наложения; атрибуты включают даты прибытия/вылета, hex, бортовой номер.
- CSV: одна строка на запись; колонки включают hex и бортовой номер, а также развёрнутый
ac_data (без сырой колонки ac_data_json).
- JSON: обёрнутая полезная нагрузка на каждое судно:
{ hex, tail, meta, data: [raw trace_full blobs] }; консолидированный JSON — список таких нагрузок.
- Сводка Excel (полная книга с несколькими листами):
Summary: метаданные (hex, регистрация, тип, владелец, модель, флаги, диапазон дат); данные FAA при наличии.
Flights: одна строка на обнаруженный этап; колонки: hex, бортовой номер, ID сегмента, временные метки вылета/прибытия UTC, длительность, ID и названия аэропортов вылета/прибытия, широта/долгота, группировки по дню недели/дню месяца/часу, позывной и история.
Airports: лучшие аэропорты по посещениям (прибытия + вылеты) с ID, ICAO/IATA, названием, городом/страной, количеством, широтой/долготой; включает столбчатую диаграмму «Аэропорты по количеству посещений».
Routes: лучшие маршруты с читаемыми названиями аэропортов и количеством; включает столбчатую диаграмму «Количество пройденных маршрутов».
DayOfWeek: количество по дням недели со столбчатой диаграммой.
DayOfMonth: количество по дням месяца со столбчатой диаграммой.
Hours: взлёты и посадки по часам UTC с двухсерийной столбчатой диаграммой (взлёты — синим, посадки — оранжевым).
Countries: посещения по странам со столбчатой диаграммой.
Callsigns: счётчики использования позывных.
- На диаграммах белый фон, целочисленные оси Y с разумной сеткой (каждые 10 или 100 для больших значений) и подписи значений на столбцах.
Ресурсы и кэширование
- Общие данные находятся в
resources/ (acdb_cache, airport_db, faa_registry). Сборки PyInstaller включают их через --add-data и копируют рядом с EXE.
- Кэш треков ADSBx хранится в
output/cache/<hex>/YYYY-MM-DD.json.
- Экспорт по каждому судну группируется в
output/<HEX>_<TAIL>/ (или только hex, если бортового номера нет). Консолидированные пакетные экспорты используют consolidated_<N>ACFT_<date range>* в основной папке output/.
Примечания и ограничения
- Пробелы в покрытии по-прежнему могут приводить к пропуску точного времени нахождения на земле; сопоставление с ближайшим аэропортом может прибегать к синтетическим ID
LL_lat_lon.
- Фотографии в Excel отключены, чтобы избежать повреждения рисунков.
- Однофайловый EXE велик, так как включает Python + Qt + зависимости; используйте вариант one-dir, если нужен EXE меньшего размера.
Лицензия
- Apache License 2.0 (см.
LICENSE). Внешние данные/API остаются на своих собственных условиях.