105 lines
7.5 KiB
Markdown
105 lines
7.5 KiB
Markdown
# 2026-05-13 — Terrain UI фикс + генерация тайлов
|
||
|
||
## Что сделано
|
||
|
||
### Terrain UI баги (из UI-тестов)
|
||
- **Попап terrain** — позиционирование исправлено (привязка к кнопке, а не top-right угол)
|
||
- **Подписи чекбоксов** — были невидимы из-за отсутствия шрифтов в headless Chromium. Установлены Noto Sans в тестовое окружение. В реальном браузере подписи были видны всегда.
|
||
- **"Зум 10+"** подсказка для hillshade — теперь вызывается при открытии попапа + стилизована заметно
|
||
- **Переименование:** Гипсометрия → "Высоты цветом", Отмывка → "Тени рельефа"
|
||
- **Opacity:** снижен с 0.85 → 0.65 для читаемости подписей населённых пунктов
|
||
|
||
### Генерация hypso тайлов
|
||
- **Root cause пустых тайлов:** VRT создавался с относительными путями к HGT, сохранялся в другую директорию → GDAL не находил source files → все пиксели = 0
|
||
- **Фикс:** VRT строится с абсолютными путями через `-input_file_list`
|
||
- **Тестовая генерация:** Чувашия (зумы 5-14) — подтверждена работоспособность
|
||
- **Полная генерация:** 81 HGT файл, зумы 5-12, ~48K тайлов
|
||
|
||
### Скачивание недостающих SRTM
|
||
- Дыра E041-E046 (Владимир — Нижний Новгород — Чебоксары) закрыта
|
||
- 14 файлов скачаны с kurviger.de зеркала (User-Agent нужен!)
|
||
- Итого: 81 HGT файл (было 67)
|
||
|
||
### Новый слой: Перепады (TRI — Terrain Ruggedness Index)
|
||
- Отдельный чекбокс "Перепады" в попапе рельефа
|
||
- Алгоритм: gdaldem TRI → color-relief с порогами от TRI=3
|
||
- Цветовая шкала: прозрачный (плоско) → жёлтый (3-5) → оранжевый (5-10) → красный (10+)
|
||
- Первая версия порогов (TRI=10) была слишком высокой — среднее TRI=2.97
|
||
- Пересгенерено с порогом от 3 — теперь видно
|
||
|
||
### Деплой
|
||
- Статика отдаётся через контейнер `prototype-enduro-trails-1` (FastAPI)
|
||
- Файлы на хосте НЕ = файлы в контейнере (образ вкомпилен при сборке)
|
||
- Нужен `docker cp` после каждого изменения CSS/JS/HTML
|
||
- Nginx location `/enduro/terrain/` → `/home/slin/enduro-trails/data/terrain/` (тайлы с хоста напрямую)
|
||
|
||
## Технические заметки
|
||
|
||
### SRTM зеркала
|
||
- `firmware.ardupilot.org/SRTM/ap_srtm3/` — ненадёжно (0 байт)
|
||
- `srtm.kurviger.de/SRTM3/Eurasia/` — работает, но нужен User-Agent (403 без него)
|
||
- `viewfinderpanoramas.org/dem3/` — таймауты
|
||
|
||
### Headless Chromium шрифты
|
||
- Контейнер OpenClaw не имеет шрифтов и fontconfig
|
||
- Установлены Noto Sans в `~/.local/share/fonts/` + fontconfig из deb
|
||
- Без этого кириллица не рендерится в скриншотах
|
||
|
||
### TRI color ramp (финальный)
|
||
```
|
||
0-2: прозрачный
|
||
3: жёлтый (alpha 60)
|
||
4: жёлтый (alpha 100)
|
||
5: оранжевый (alpha 140)
|
||
7: тёмно-оранжевый (alpha 180)
|
||
10: красный (alpha 200)
|
||
15+: тёмно-красный (alpha 220+)
|
||
```
|
||
|
||
## TODO
|
||
- [ ] Попап terrain: третий чекбокс обрезается на мобильном — нужен overflow/scroll или сдвиг позиции
|
||
- [ ] На зуме 10 MapLibre запрашивает тайлы зума 11 (devicePixelRatio?) — нужно генерить зум 11 тоже или разобраться с overzooming
|
||
|
||
|
||
### Расширение покрытия на запад (Смоленск)
|
||
- Слава попросил покрытие от Солнечногорска (~37E) до Смоленска (~32E)
|
||
- Скачаны 20 SRTM файлов: N53-N56, E032-E036 (kurviger зеркало, User-Agent обязателен)
|
||
- Итого: 101 HGT файл (было 81)
|
||
- Перегенерены hypso + TRI тайлы (зумы 5-12), ~65K тайлов
|
||
- Bounds в app.js обновлены: `[35, 45, 55, 62]` → `[32, 45, 55, 62]`
|
||
- `docker cp` app.js в контейнер
|
||
- Покрытие теперь: 32E (Смоленск) — 51E (Чебоксары), 50N — 61N
|
||
|
||
## TODO (обновлённый)
|
||
- [ ] Попап terrain: третий чекбокс обрезается на мобильном — нужен overflow/scroll или сдвиг позиции
|
||
- [ ] На зуме 10 MapLibre запрашивает тайлы зума 11 (devicePixelRatio?) — нужно генерить зум 11 тоже или разобраться с overzooming
|
||
- [ ] Слава ещё не подтвердил что видит покрытие от Смоленска — ждём фидбек
|
||
|
||
|
||
### Полный прогон тестов (55 тест-кейсов)
|
||
- **Результат: 53 PASS, 2 FLAKY, 0 FAIL**
|
||
- Flaky (не баги): TC-1.1 (сетевая задержка 22с при массовом прогоне), TC-2.1 (порядок тестов влияет на localStorage)
|
||
- Покрыто: загрузка, навигация, тема, компас, попап, hillshade, TRI, грунтовки, тропы, маршруты, разведка, scenic, link, линейка, маркеры, поиск, sheets, деактивация, адаптивность, производительность, покрытие данных, edge cases
|
||
|
||
### Баг: грунтовки не рендерились (КРИТИЧЕСКИЙ)
|
||
- **Root cause:** Относительный URL `/api/tiles/{z}/{x}/{y}.mvt` в style.json не резолвился в MapLibre Web Worker (workers не имеют `document.baseURI`)
|
||
- **Фикс:** Заменён на абсолютный URL `https://openclaw.mva154.duckdns.org/enduro/api/tiles/{z}/{x}/{y}.mvt` в style.json и style-dark.json
|
||
- После фикса: 2079 source features, 387 tracks rendered, 35 paths rendered
|
||
|
||
### Баг: TRI пропадает при смене темы
|
||
- **Root cause:** `map.setStyle(url)` не триггерит `style.load` event в MapLibre. Listener `once('style.load')` в `switchMapStyle` никогда не вызывался.
|
||
- **Фикс:** Заменён на `map.once('idle')` + вызов `rebuildMapOverlays()` (который теперь включает `restoreTerrainState()` и `restoreTrailsState()`)
|
||
|
||
### Итого за сессию исправлено 8 багов:
|
||
1. Пустые hypso тайлы (VRT relative paths)
|
||
2. Дыра Владимир—Чебоксары (+14 SRTM)
|
||
3. Дыра до Смоленска (+20 SRTM)
|
||
4. TRI невидим (порог 10→3)
|
||
5. Попап обрезается (bottom-aligned)
|
||
6. Карта прыгает при зуме (bounds убран)
|
||
7. Грунтовки не рендерятся (relative URL в Worker)
|
||
8. TRI пропадает при смене темы (idle event)
|
||
|
||
### Отчёт
|
||
- Полный отчёт: `tasks/enduro-trails/reports/full-test/REPORT.md`
|