12 KiB
12 KiB
2026-03-22
Обсуждение Flightradar24 и техстека
Flightradar24 Explorer подписка
- Слава сообщил, что у него оформлена подписка на тарифный план Explorer в Flightradar24
- Попросил проверить возможности этой подписки и ответить на второй вопрос
- Проведён анализ API подписок Flightradar24:
- Три уровня подписки API: Explorer (entry-level), Essential, Advanced
- Explorer предоставляет 60,000 data credits в месяц (по промоции до 120,000 до 31 мая 2026)
- Доступные endpoints:
- Статические данные: аэропорты (light), авиакомпании (light)
- Live данные: позиции самолетов (light и full)
- Исторические данные: события полетов (light и full), позиции (light и full)
- Сводки полетов (light и full)
- Треки полетов
- Отчет об использовании API
- Ограничения: нет доступа к airports full, live/historic flight positions count, flight summary count
Техстек
- Слава согласен с моим предложением по техстеку (контекст предыдущего обсуждения)
- 22 марта 13:24 - Слава подтвердил согласование подхода и предложил приступать к работе
Голосовые сообщения
- Успешно протестирована отправка голосовых сообщений через скилл voice-tts
- Получено тестовое голосовое сообщение от Славы, отправлен ответ голосом
- Получено подтверждение согласования подхода (голосовое сообщение)
- Представлено ТЗ по интеграции Flightradar24 API (голосовое + файл)
Flightradar24 API - Карта шумового загрязнения
- 22 марта 13:44 - Получена детальная постановка задачи от Славы: веб-страница с картой шумового загрязнения от самолётов на основе исторических данных Flightradar24
- 22 марта 13:45 - Получены ответы на уточняющие вопросы:
- География: Московская область
- Период: до одного года (начать с 6 или 12 месяцев в зависимости от доступности данных)
- Типы самолётов: все доступные в Flightradar24
- Модель шума: на первом этапе учитывать только высоту (тип самолёта, время суток, ветер - в бэклог)
- Визуализация: траектория полёта + шумовая граница (зависит от высоты) на карте
- Интерактивность: зум, фильтры по времени, при наведении показывать рейс, высоту, скорость, аэропорты
- Точность: без привязки к реальным замерам шума, санитарные нормы - в бэклог
- Технологии: простые, доступные, без жёстких предпочтений
- Доступ к данным: ключ и подписка Explorer уже есть
- 22 марта 14:06 - Создано новое ТЗ:
tasks/flightradar24/reports/ТЗ_Карта_шумового_загрязнения_Flightradar24.md - 22 марта 14:10 - Произведена очистка проекта: удалены все файлы, не относящиеся к новой задаче, оставлены только:
config.json(обновлён под новую задачу)README.md(полностью переписан)scripts/check_api.py(скрипт проверки API)scripts/flightradar24_explorer.py(базовый клиент API)requirements.txt(зависимости Python)reports/ТЗ_Карта_шумового_загрязнения_Flightradar24.md(основное ТЗ)
- Создана структура проекта: папки
backend/,frontend/,data/,docs/ - Создан файл
.env.exampleс шаблоном конфигурации - 22 марта 14:15 - Получен sandbox API ключ от Славы:
9d4d192b-8641-4420-b00e-09e3d935badf|fIMdnj8WixjDqyaUTHLKPlgHU9d5JiOZwJJWGiVHdcda602e - 22 марта 14:20 - Создано виртуальное окружение Python, установлены зависимости (requests, python-dotenv)
- 22 марта 14:21 - Обнаружено, что для sandbox нужен другой базовый URL (
https://fr24api.flightradar24.com/api) и заголовокAccept-Version: v1 - 22 марта 14:22 - Успешно протестирован sandbox API:
- Endpoint
/static/airlines/AAL/lightвернул данные American Airlines - Endpoint
/live/flight-positions/lightс параметром bounds вернул 2 тестовых полёта
- Endpoint
- Sandbox возвращает статические тестовые данные, что подходит для прототипа
- Отправлено голосовое сообщение Славе о начале работы над прототипом
Прототип v0.2 — Карта шумового загрязнения (22 марта 2026, вечер)
Ключевые технические решения
Картографическая библиотека:
- Leaflet → отклонён (слабая производительность)
- MapLibre GL → отклонён (WebGL заблокирован в sandbox-браузере Славы:
Sandboxed = yes) - OpenLayers 10 (Canvas2D) → выбран ✅ работает везде без WebGL
Геометрия шумовых зон:
- Turf.js
buffer()+difference()— реальные км на земле - Строятся посегментно для каждого сегмента трека
- Зоны: 0–2 км, 2–5 км, 5–7 км, 7–11 км от самолёта
Физическая модель шума (теорема Пифагора):
- D = √(R² − H²), где R — граница зоны (сфера), H — высота, D — ширина на карте
- Чем выше самолёт — тем уже зона
- При H ≥ R зона исчезает
Доступ к карте:
- nginx proxy:
https://openclaw.mva154.duckdns.org/noisemap/→ Flask :5555 - location /noisemap/ → proxy_pass http://172.19.0.2:5555/
Данные (загружено)
Production API FR24, 4 аэропорта, 2 дня:
- SVO 21.03: 33 рейса (вылеты + прилёты)
- DME 21.03: 15 рейсов
- VKO 21.03: 21 рейс
- ZIA 21.03: 1 рейс (WZ560 TBS→ZIA)
- SVO/DME/VKO/ZIA 20.03 +1.5ч смещение: загружены
- Итого: 147 рейсов / 29 487 точек
Критически важное замечание по FR24 API:
- bounds формат:
lat_max,lat_min,lon_min,lon_max(НЕ lat_min,lon_min!) - Ошибочный формат возвращал самолёты над США вместо МО
flight-tracksне поддерживает фильтр по времени — весь трек ~700 точек/10сек- Стоимость треков: ~74 кредита/запрос
Стратегии загрузки
Стратегия А (реализована): снимки каждые 3ч → треки
- Охват: ~10–20%, стоимость ~3 100 кредитов/день/аэропорт
- 7 дней × 4 аэропорта ≈ 87 000 кредитов ✅
Стратегия Б (планируется): табло → все треки
- Охват: ~100%, стоимость ~24 500 кредитов/день/аэропорт
- Требует источник списка рейсов по дате
- Исследование источников (19:15–19:23 МСК):
- FR24 сайт (api.flightradar24.com) — только текущие данные, исторические недоступны
- FR24 Explorer API — нет endpoint для списка рейсов по аэропорту/дате
- svo.aero — SPA (Angular), нет публичного JSON API
- Яндекс.Расписания — нужен API ключ (бесплатный, требует аккаунт Яндекс)
- OpenSky Network — нужна регистрация для исторических данных
- Лучший вариант: Яндекс.Расписания — нужен ключ от Славы
Функциональность карты (итоговая)
- Треки: градиент по высоте 🔴→🟡→🟢 (0–8500 м)
- Шумовые зоны: реальные полигоны, чекбоксы для каждой зоны
- Переключатель видимости треков (зоны остаются)
- Фильтры: аэропорт (SVO/DME/VKO/ZIA/все), тип (вылет/прилёт), высота (м), период
- Карточка рейса: тип 🛫/🛬, название города (Сочи (AER)), дата, вход/выход из МО в МСК
- Флажки: несколько, переименование (dblclick), удаление (клик), разные цвета
- Линейка: мультисегментная, Haversine, двойной клик = завершить
- Прокрутка боковой панели ✅
Документация проекта
Создана полная документация в tasks/flightradar24/prototype/docs/:
- ARCHITECTURE.md — схема системы, стек, поток данных
- DATA_LOADING.md — обе стратегии с расчётом кредитов, FAQ
- NOISE_MODEL.md — физическая модель, формула, таблица зон
- FR24_API.md — endpoints, bounds gotcha, rate limits
- UI.md — слои, фильтры, флажки, линейка, nginx конфиг
- DEVLOG.md — хронология решений, технические долги
Расход кредитов FR24 (на конец дня)
- Итого потрачено: ~16 161 из 120 000 промо (~13.5%)
- Остаток: ~103 839 кредитов
Стратегия Б — статус (22.03.2026 вечер)
- Яндекс.Расписания ключ получен:
788c6840-5f85-4a04-bfb5-4e20c003cffc - Сохранён в
.envкакYANDEX_RASP_API_KEY, код станции SVO:s9600213 - Собрано табло SVO 21.03: 750 рейсов →
data/tablo_SVO_2026-03-21.json - После дедупликации: 66 совпадений (треки уже есть), 684 новых
- fetch_strategy_b.py (v1) — ПРОВАЛИЛСЯ: алгоритм искал fr24_id в снимке в момент вылета, но самолёт ещё на земле → 0 результатов
- fetch_strategy_b_v2.py — ИСПРАВЛЕН: ищет через +15/+30/+45 мин после вылета (или -30/-20/-10 мин до прилёта), расширенный bbox 200 км вокруг SVO
- Запуск v2 запланирован на 20:25 UTC через cron (cron job ID: 63c2c8ce) — ждём сброса rate limit
- FR24 rate limit сейчас активен из-за ~684 запросов первого запуска
Текущие данные на карте
- 147 рейсов / 29 487 точек (стратегия А, все аэропорты, 20–21.03)
- URL: https://openclaw.mva154.duckdns.org/noisemap/
- Flask работает на порту 5555
Следующие шаги
- ⏳ Дождаться запуска fetch_strategy_b_v2.py в 20:25 UTC, сообщить результат
- Фильтр по дате в UI
- Тепловая карта накопленного шума
- Модель шума v2 (учёт типа ВС)