Files
enduro-trails/docs/architecture
claude-bot 231c99c045
All checks were successful
CI / lint (push) Successful in 3s
CI / test (push) Successful in 6s
CI / build (push) Successful in 1s
docs(ET-007): architecture - ADR, infra-requirements, data-requirements, tech-risks
2026-05-31 20:01:06 +00:00
..

Архитектура Enduro Trails

Обзор

Веб-приложение для планирования эндуро-маршрутов с визуализацией рельефа.

Компоненты

  • Frontend — MapLibre GL JS, vanilla JS (ES modules)
  • Backend API — FastAPI (Python 3.12), uvicorn
  • Tile Server — статические raster tiles (PNG), раздаются через FastAPI/nginx
  • Routing Engine — OSRM с кастомным эндуро-профилем
  • Database — SQLite + Spatialite (точки интереса, маршруты)

Слои карты

  • Base map: Схема (OpenStreetMap raster) либо Спутник (Esri World Imagery raster) — переключается в UI (ET-007 / ADR-004)
  • Hillshade (рельеф с тенями)
  • TRI (Terrain Ruggedness Index — сложность рельефа)
  • Hypsometric (высотная раскраска)
  • Trails (маршруты из OSM)

Внешние тайл-провайдеры

Клиент (браузер) обращается напрямую к двум внешним raster-tile сервисам. Сервер mva154 эти тайлы не проксирует и не кэширует.

Провайдер Назначение URL Активация API-ключ
OpenStreetMap Базовый слой «Схема» https://tile.openstreetmap.org/{z}/{x}/{y}.png всегда (default подложка) нет
Esri World Imagery Базовый слой «Спутник» https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x} лениво — только при включении «Спутник» пользователем (ET-007) нет

Атрибуция обоих провайдеров выводится MapLibre автоматически при активном source.

Деплой

Один Docker Compose на mva154. Nginx проксирует /enduro/ на контейнер.

Клиентские модули (src/web/)

Модуль Описание Work Item
app.js Главный модуль: MapLibre, роутинг, UI, тёмная тема PH-1..PH-6
units.js Централизованный форматтер расстояний (км/мили), localStorage, событие unitchange ET-005
gpx.js GPX 1.1 парсер (DOMParser), рендеринг треков/waypoints, canvas-профиль высот, rebuildMapOverlays() ET-006
style.json MapLibre стиль (светлая тема) PH-1/PH-5
style-dark.json MapLibre стиль (тёмная тема) PH-5