164 lines
12 KiB
Markdown
164 lines
12 KiB
Markdown
# 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 тестовых полёта
|
||
- 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
|
||
|
||
### Следующие шаги
|
||
1. ⏳ Дождаться запуска fetch_strategy_b_v2.py в 20:25 UTC, сообщить результат
|
||
2. Фильтр по дате в UI
|
||
3. Тепловая карта накопленного шума
|
||
4. Модель шума v2 (учёт типа ВС)
|