auto-sync: 2026-05-12 22:40:01

This commit is contained in:
Stream
2026-05-12 22:40:01 +03:00
parent 7bf0366f1e
commit d19414f2ae

View File

@@ -97,7 +97,7 @@ docker restart prototype-enduro-trails-1
| F-14 | "Разведка" | Грунтовки вокруг точки, статистика по типам, POI | ⏳ Бэклог | 4 |
| F-15 | "Народные треки" | OSM Traces, Wikiloc, Komoot, 4x4travel | ⏳ Бэклог | 8 |
| F-16 | Тёмная тема + редизайн | Две темы (авто/светлая/тёмная), SunCalc, мобильный UI, drag-and-drop точек, расстояние по маршруту | ✅ Готово | 5 |
| F-29 | Рельеф (terrain) | Цветной рельеф (все зумы) + теневой (зум 10+). SRTM 30м, кнопка 🏔️ в toolbar с чекбоксами | 📋 BRD готов | 5.4 |
| F-29 | Рельеф (terrain) | Цветной рельеф (все зумы) + теневой (зум 10+). SRTM 30м, кнопка 🏔️ в toolbar с чекбоксами | ⚠️ В работе | 5.4 |
| F-22 | Линейка UX | Расстояние сегмента под маркером, крестик удаления, зелёный Старт, панель fit-content, toast, toggle скрыть/показать, deleteRuler | ✅ Готово | 5.2 |
| F-23 | Метки UX | Починен баг удаления через попап (popup.remove() перед marker.remove()) | ✅ Готово | 5.2 |
| F-24 | Поиск точек маршрута | Inline Nominatim поиск в каждом wl-item, убран верхний search bar | ✅ Готово | 5.2 |
@@ -204,13 +204,41 @@ docker restart prototype-enduro-trails-1
- `streaming.mode: "off"` в Telegram канале — убраны дублированные сообщения
- `send_voice.sh` — убрана отправка через `openclaw message send`, только генерация OGG + `MEDIA:` директива
### 📋 Фаза 5.4 — Рельеф на карте
### ⚠️ Фаза 5.4 — Рельеф на карте (12.05.2026, в работе)
**BRD:** `BRD_TERRAIN.md`
**DEV TASK:** `DEV_TASK_TERRAIN.md`
- F-29 Рельеф (terrain) — цветной (все зумы) + теневой (зум 10+)
- SRTM 30м, GDAL, растровые тайлы PNG
- Кнопка 🏔️ в toolbar с чекбоксами, localStorage
- nginx статика `/enduro/terrain/`
**DEV TASK:** `DEV_TASK_TERRAIN.md`
**TEST CASES:** `TEST_CASES_TERRAIN.md`
**Что сделано:**
- ✅ SRTM данные скачаны (ЦФО + Чувашия)
- ✅ Hillshade тайлы сгенерированы (зумы 10-15, 3.04M тайлов)
- ✅ Hypso тайлы перегенерированы (зумы 5-15, 1.05M тайлов) — убран синий nodata
- ✅ Nginx настроен: `/enduro/terrain/` → alias `/home/slin/enduro-trails/data/terrain/`
- ✅ Cache-Control: `public, immutable`
- ✅ Кнопка 🏔️ в toolbar, попап с чекбоксами «Гипсометрия» / «Отмывка»
- ✅ localStorage персистентность состояния
- ✅ Кнопка active при включённом слое
- ✅ Попап закрывается по клику вне / повторному нажатию
- ✅ Hillshade чекбокс disabled на зуме < 10 + hint «Зум 10+»
-`scheme: 'tms'` в sources (тайлы в TMS формате)
-`bounds: [35, 45, 55, 62]` — ограничение запросов регионом данных
- ✅ Z-index: рельеф под дорогами (`beforeId` = первый road/trail layer)
**Известные проблемы:**
- ⚠️ Гипсометрия выглядит как однородный зелёный блок на малых зумах — ЦФО равнина, мало перепадов. Нужна корректировка color ramp для лучшей дифференциации низких высот (0-200м)
- ⏳ TC-24/TC-25 (мобильный попап) — не проверены, ждут ручного тестирования
**Тест-кейсы (TC-07..TC-25):**
- ✅ 19 из 19 автоматизируемых — зелёные
- ⏳ 2 мобильных (TC-24, TC-25) — ожидают ручной проверки
**Технические детали:**
- Тайлы генерировались `gdal2tiles.py` без `--xyz` → формат TMS (y инвертирован)
- MapLibre source: `scheme: 'tms'` для корректного маппинга
- Color ramp: `hypso_ramp.txt`, nodata → прозрачный (alpha), убрана строка `-100 70 107 159`
- Hypso: opacity 0.55, hillshade: opacity 0.40
- Фронтенд отдаётся через FastAPI (контейнер), статика через `docker cp`
- Terrain тайлы отдаются nginx напрямую (не через контейнер)
### ⏳ Фаза 6 — SRTM рельеф (продвинутый)
- F-12 «Горка» — макс набор высоты, мин дистанция
@@ -243,7 +271,10 @@ docker restart prototype-enduro-trails-1
| `docker cp` после рестарта (не до) | Образ перезаписывает статику при рестарте — cp нужен после того как контейнер поднялся |
| `deploy_app2.js` только для app.py | Скрипт не копирует статику — для фронтенда использовать `deploy_static.js` + ручной cp после рестарта |
| Масштабирование сегментов к `route.distance_m` | OSRM геометрия упрощена — haversine по точкам даёт ~0.2% погрешность; масштабирование даёт точное совпадение |
| `renderWaypointsList()` после `drawRouteResults()` | Список рендерится до построения маршрута — нужен повторный вызов когда `routeResults` заполнен |
| Тайлы terrain в TMS формате | `gdal2tiles.py` без `--xyz` генерирует TMS; MapLibre по умолчанию XYZ → нужен `scheme: 'tms'` в source |
| `bounds: [35, 45, 55, 62]` в terrain sources | Без bounds MapLibre запрашивает тайлы за пределами региона → 404 |
| nodata → прозрачный (alpha) | Строка `-100 70 107 159` в ramp красила водоёмы/nodata в синий; убрана, добавлен `-alpha` при генерации |
| Terrain тайлы через nginx, не через контейнер | Статика быстрее через nginx alias; контейнер обслуживает только API и фронтенд |
| `streaming.mode: "off"` для Telegram | `partial` и `progress` шлют промежуточные сообщения — `off` даёт одно финальное |
| Сэмплирование каждые ~500м для stats | Без этого расчёт >30с на длинных маршрутах |
| Grid cache для calc_route_stats | Убирает повторные SQL запросы для близких точек |