
Earthquake
Трекер землетрясений в реальном времени на 3D-глобусе
Трекер землетрясений в реальном времени на 3D-глобусе Apple Maps. Данные USGS, фильтры по магнитуде и push-уведомления.
Обзор
Earthquake — нативное iOS-приложение, визуализирующее глобальную сейсмическую активность на 3D-гибридном глобусе Apple Maps. Данные поступают напрямую из USGS GeoJSON feed — без бэкенда, обновление каждые 5 минут.
Пины магнитуды окрашены от серого до тёмно-красного и масштабируются логарифмически. Нижний лист перечисляет недавние события; тап на любое приближает глобус к точке события.
Фильтры: временное окно (1ч, 24ч, 7д, 30д) и минимальная магнитуда. Push-уведомления при крупных событиях (M ≥ 6.0). Только тёмная тема.
Проблема
Данные о сейсмической активности открыты от USGS, но существующие приложения представляют их в виде плоских списков или низкокачественных карт. Не было способа видеть глобальное распределение землетрясений на настоящем 3D-глобусе в реальном времени или получать мгновенные уведомления с контекстом местоположения.
Что мы построили
- Полноэкранный 3D-гибридный глобус с реалистичным рельефом через MapKit
- Живые данные USGS, обновляемые каждые 5 минут, с Firestore как единым слоем данных
- Пины магнитуды от серого (незначительные) до тёмно-красного (крупные)
- Фильтры по временному окну (1ч, 24ч, 7д, 30д) и минимальной магнитуде
- Push-уведомления при крупных землетрясениях (M ≥ 6.0) через Firebase Cloud Messaging
- Живая карта землетрясений на earthquakes.site с MapLibre GL JS
Технологии
iOS-приложение
Данные
Уведомления
Сайт
Под капотом
iOS без бэкенда — прямой запрос USGS
Приложение запрашивает USGS GeoJSON напрямую — без прокси, без бэкенда. SwiftData хранит последний батч локально. BGAppRefreshTask обновляет кэш каждые 5 минут в фоне. Это позволяет приложению работать бесплатно без затрат на хостинг.
Firestore как единый слой данных
Поллер на VPS2 запускается каждые 5 минут и batch-записывает данные о землетрясениях в Firestore. Как iOS-приложение, так и сайт (earthquakes.site) читают из Firestore — это устранило расхождение источников данных и позволило живой карте сайта использовать onSnapshot для обновлений в реальном времени.
MapKit гибридный глобус
MapStyle.hybrid(elevation: .realistic) рендерит спутниковые снимки на настоящей 3D-сфере. Пины — MapAnnotation с логарифмическим масштабом по магнитуде. Intro flyby запускается один раз при холодном старте: 600мс задержка → easeInOut 2.2с к геопозиции.