Карта воздушного движения: пользователь задаёт точку и радиус, приложение раз в секунду подтягивает борта из FlightRadar24 и рисует их на карте вместе с треками, курсом и высотой.
Помимо позиции, для каждого борта считается дальность и азимут от выбранной точки — по формуле гаверсинуса и расчёту пеленга, без внешних геобиблиотек. Изначально проект вырос из задачи «что сейчас летит надо мной».
Что сделано
Express-прокси к FlightRadar24: клиент не ходит во внешний API напрямую и не упирается в CORS и лимиты.
Собственные расчёты дальности (гаверсинус) и азимута вместо геобиблиотеки.
Маркеры, попапы и треки на MapLibre GL: слои создаются и снимаются по жизненному циклу борта, без утечек и наложения источников.
Переезд с Mapbox на MapLibre и открытые тайлы OpenFreeMap: внешнего аккаунта с лимитами, из-за которого карта однажды молча перестала грузиться, больше нет.
Кеш ответов на сервере: зрители одной зоны обслуживаются одним запросом к источнику, а при его сбое отдаётся последний известный список бортов вместо пустого.
Самоперепланирующийся цикл опроса с корректной остановкой при смене точки — иначе таймеры копятся и запросы идут стопкой.
Docker Compose на клиент и сервер, деплой через GitHub Actions.
Интерфейс
Борта в реальном времени на карте MapLibre: позывные, треки и круг зоны поиска вокруг выбранной точки