Files
enduro-trails/docs/architecture/README.md
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

46 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Архитектура 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 |