25e4476cf704fdd7ae98c6376b734db670b670d4
All checks were successful
Правки по код-ревью ET-006 (docs/work-items/ET-006/12-review.md): - P1-1: trackStats считал min/max высот через Math.min/max.apply — на треках в сотни тысяч точек это бросало RangeError и валило загрузку файла (нарушение REQ-NF-01). Расчёт переписан на однопроходный аккумулятор (makeStatsAccumulator/accumulatePoint/finalizeStats) без apply. - P2-1: статистика и профиль высот учитывали только tracks[0]. Добавлены aggregateStats() и buildFileProfileSamples() — сводка и профиль теперь охватывают все треки файла (REQ-F-09, AC-02). - P2-2: расчёт статистики на async-пути парсинга вынесен в чанковый trackStatsChunked() — соответствие букве ADR-003 §2. - P3-1: ось и tooltip профиля высот форматируют расстояние через formatKm() — согласование с выбором км/мили из ET-005. - P3-2: childText() переименована в firstTagText() — имя соответствует фактическому поведению (поиск по всем потомкам). - P3-4: убран дублирующийся 'use strict'. Добавлены регрессионные unit-тесты: большой трек без падения, эквивалентность trackStatsChunked синхронному trackStats (в т.ч. на треке длиннее размера чанка), агрегация статистики и профиля по многотрековому файлу. Refs: ET-006 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Enduro Trails 🏍️
OSM-карта с фокусом на грунтовые дороги для построения эндуро-маршрутов.
Что это
Обычные карты оптимизированы под автомобили — асфальт яркий, грунтовки не видны. Enduro Trails переворачивает логику: грунтовки и тропы — главный слой, асфальт — тусклый фон.
Приложение помогает:
- Найти грунтовые дороги в любом районе
- Построить маршрут с максимумом грунта и минимумом асфальта
- Оценить сложность (grade 1-5, покрытие, уклон)
- Найти живописные места (озёра, виды, руины, броды)
- Экспортировать маршрут в GPX для навигатора
Демо
https://openclaw.mva154.duckdns.org/enduro/
Фичи
- 🗺️ Карта грунтовок — MapLibre GL JS, кастомный стиль, тёмная/светлая тема
- 🛤️ Маршрут — до 5 альтернатив с разным балансом грунт/асфальт, промежуточные точки
- ✨ Красивый маршрут — замкнутый круг через живописные POI
- 🔗 Связка — соединить два трека грунтовками
- 🔍 Разведка — статистика грунтовок в радиусе 20/50/100 км
- 📏 Линейка — измерение расстояний на карте
- 📍 Метки — сохранение точек интереса
- 🏔️ Рельеф — гипсометрия + hillshade (SRTM 30м)
- 📊 Статистика — % грунта/асфальта, время, дистанция
- 📥 GPX экспорт — трек + waypoints для навигатора
- 🌙 Тёмная тема — авто (по закату), ручная, синхронизация карты и UI
Стек
| Компонент | Технология |
|---|---|
| Frontend | MapLibre GL JS + vanilla JS |
| Backend | Python 3.12 + FastAPI + uvicorn |
| БД | SQLite + Spatialite (1.1M треков, 14K POI) |
| Роутинг | OSRM с кастомным эндуро-профилем |
| Тайлы | Self-hosted raster (terrain, hillshade, TRI) |
| Контейнеризация | Docker + Compose |
| CI | Gitea Actions |
Регион
ЦФО + Чувашия (расширение по запросу)
Быстрый старт
make dev # поднять локально (Docker Compose)
make test # запустить тесты
make lint # линтеры
make build # собрать Docker-образ
Структура
src/api/ — FastAPI backend (маршруты, тайлы, поиск)
src/web/ — фронтенд (MapLibre, UI)
tests/ — тесты (unit, integration, e2e)
docs/ — документация, ADR, work-items
scripts/ — утилиты
migrations/ — миграции БД
.openclaw/ — system prompts агентов
Фазы
| # | Название | Описание |
|---|---|---|
| PH-1 | MVP | Карта грунтовок + MVT тайлы |
| PH-2 | Routing | OSRM роутинг + базовый UI |
| PH-3 | Smart Route | Альтернативы, статистика, GPX |
| PH-4 | Advanced Routing | Красивый маршрут, связка, разведка |
| PH-5 | Redesign | Тёмная тема, mobile UI, UX |
| PH-6 | Terrain | Hillshade + гипсометрия + TRI |
| PH-7 | Barriers | Шлагбаумы, тротуары, слой препятствий |
| PH-8 | Elevation Profile | Профиль высот, режим «Горка» |
| PH-9 | PWA | Офлайн режим |
Детали каждой фазы: docs/phases/
Лицензия
Данные: © OpenStreetMap contributors (ODbL) Рельеф: NASA SRTM (Public Domain)
Description
Languages
Python
49.1%
JavaScript
39.7%
CSS
5.6%
HTML
4.3%
Lua
0.7%
Other
0.5%