Supafastsupafast.tech
Все продукты
Earthquake logo
iOS · Карты

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-приложение

SwiftUISwiftSwiftDataMapKit

Данные

USGS GeoJSON feedFirebase Firestore

Уведомления

Firebase Cloud MessagingUNUserNotificationCenter

Сайт

Astro 5ReactMapLibre GL JSVercel

Под капотом

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с к геопозиции.

Все продукты