diff --git a/tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md b/tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md new file mode 100644 index 0000000..696d068 --- /dev/null +++ b/tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md @@ -0,0 +1,229 @@ +# DEV TASK: Перегенерация hypso тайлов (тест + полный прогон) + +**Статус:** Ready for dev +**Проект:** enduro-trails +**Фаза:** 5.4 + +--- + +## Цель + +> Сгенерировать рабочие тайлы гипсометрии из SRTM HGT файлов. Сначала тестовый прогон на 1 зуме, потом полная генерация. + +## Контекст + +- `merged_srtm.tif` — пустой (все пиксели = 0), merge был сделан неправильно +- `hypso_colored.tif` — тоже пустой (следствие) +- Отдельные HGT файлы рабочие: N55E037.hgt имеет высоты 100-264м +- Hillshade тайлы рабочие — значит для hillshade использовался другой VRT/merge +- Скрипт `regen_hypso.sh` существует, но его VRT тоже даёт пустой результат +- **67 HGT файлов**, 1.7 ГБ, покрытие ~37E-51E, 50N-61N + +## Проблема + +Скрипт `regen_hypso.sh` использует `gdalbuildvrt -vrtnodata -32768` — это корректно (nodata в SRTM = -32768). Но `merged_srtm.tif` пустой — значит при его создании что-то пошло не так. Возможно: +1. VRT создавался из пустой директории +2. Или merge делался с неправильными параметрами +3. Или файл был перезаписан пустым + +**Решение:** не использовать `merged_srtm.tif`, а строить VRT напрямую из HGT файлов каждый раз. + +--- + +## Инфраструктура + +| Параметр | Значение | +|----------|----------| +| Сервер | `slin@82.22.50.71` (пароль: `motoZ@yaz2010`) | +| SSH | через ssh2 Node.js модуль | +| SRTM данные | `/home/slin/enduro-trails/data/srtm/` (67 файлов .hgt) | +| Выходная директория | `/home/slin/enduro-trails/data/terrain/hypso/` | +| URL проверки | `https://openclaw.mva154.duckdns.org/enduro/terrain/hypso/{z}/{x}/{y}.png` | + +--- + +## Задачи + +### Task 1: Тестовая генерация (1 зум, маленький участок) + +**Цель:** Убедиться что pipeline работает и тайлы содержат цвет. + +**Шаги:** + +- [ ] **1.1** Построить VRT из HGT файлов и проверить что данные есть: + +```bash +cd /home/slin/enduro-trails/data/srtm +gdalbuildvrt -vrtnodata -32768 -overwrite /tmp/hypso_test/srtm.vrt *.hgt +gdalinfo -stats /tmp/hypso_test/srtm.vrt 2>&1 | grep -E "STATISTICS_MAX|STATISTICS_MIN" +# Ожидаем: MIN > 0, MAX > 100 (реальные высоты) +``` + +- [ ] **1.2** Сгенерировать color-relief GeoTIFF (тестовый, обрезанный по bbox Москвы): + +```bash +mkdir -p /tmp/hypso_test + +# Обрезать VRT до маленького участка (Москва ±1°) +gdal_translate -projwin 36.5 56.5 38.5 55.0 /tmp/hypso_test/srtm.vrt /tmp/hypso_test/srtm_crop.tif + +# Color ramp (без синего для воды, <=0 прозрачный) +cat > /tmp/hypso_test/color_ramp.txt << 'EOF' +nv 0 0 0 0 +-100 0 0 0 0 +0 0 0 0 0 +1 57 151 105 255 +50 80 165 110 255 +100 120 180 100 255 +150 160 190 95 255 +200 139 176 96 255 +300 170 185 105 255 +500 189 188 115 255 +700 210 200 130 255 +1000 220 206 148 255 +1500 235 220 175 255 +2000 210 185 140 255 +2500 185 152 110 255 +3000 160 120 80 255 +4000 120 80 40 255 +5000 200 200 200 255 +EOF + +# Генерация color-relief с альфа-каналом +gdaldem color-relief \ + /tmp/hypso_test/srtm_crop.tif \ + /tmp/hypso_test/color_ramp.txt \ + /tmp/hypso_test/hypso_test.tif \ + -alpha \ + -of GTiff \ + -co COMPRESS=LZW + +# Проверить что не пустой +gdalinfo -stats /tmp/hypso_test/hypso_test.tif 2>&1 | grep "STATISTICS_MAX" +# Band 1 (Red) MAX должен быть > 0 +``` + +- [ ] **1.3** Нарезать тайлы только для зума 10: + +```bash +mkdir -p /tmp/hypso_test/tiles +gdal2tiles.py \ + --zoom=10 \ + --processes=4 \ + --tilesize=256 \ + --webviewer=none \ + /tmp/hypso_test/hypso_test.tif \ + /tmp/hypso_test/tiles/ + +# Проверить что тайлы не пустые +find /tmp/hypso_test/tiles/10/ -name "*.png" | head -5 | xargs -I{} file {} +find /tmp/hypso_test/tiles/10/ -name "*.png" -size +400c | wc -l +# Должно быть > 0 (файлы больше 400 байт = не пустые) +``` + +- [ ] **1.4** Скопировать тестовые тайлы в рабочую директорию и проверить через URL: + +```bash +# Бэкап текущих пустых тайлов зума 10 +mv /home/slin/enduro-trails/data/terrain/hypso/10 /home/slin/enduro-trails/data/terrain/hypso/10_backup + +# Скопировать новые +cp -r /tmp/hypso_test/tiles/10 /home/slin/enduro-trails/data/terrain/hypso/10 + +# Проверить через curl (подставить реальный x/y из ls) +ls /home/slin/enduro-trails/data/terrain/hypso/10/ | head -3 +``` + +**Критерий готовности:** Тайлы зума 10 содержат цветные пиксели (size > 400 байт). При включении гипсометрии на зуме 10 виден цветной overlay. + +--- + +### Task 2: Полная генерация (после подтверждения Task 1) + +⚠️ **НЕ ЗАПУСКАТЬ без подтверждения Славы что тест прошёл!** + +**Шаги:** + +- [ ] **2.1** Сгенерировать полный hypso GeoTIFF из всех HGT: + +```bash +cd /home/slin/enduro-trails/data/srtm +gdalbuildvrt -vrtnodata -32768 -overwrite /tmp/terrain_gen/srtm.vrt *.hgt + +gdaldem color-relief \ + /tmp/terrain_gen/srtm.vrt \ + /tmp/hypso_test/color_ramp.txt \ + /tmp/terrain_gen/hypso_full.tif \ + -alpha \ + -of GTiff \ + -co COMPRESS=LZW \ + -co BIGTIFF=YES + +# Проверить +gdalinfo -stats /tmp/terrain_gen/hypso_full.tif 2>&1 | grep "STATISTICS_MAX" +``` + +- [ ] **2.2** Удалить старые пустые тайлы и нарезать новые (зумы 5-14): + +```bash +rm -rf /home/slin/enduro-trails/data/terrain/hypso/ +mkdir -p /home/slin/enduro-trails/data/terrain/hypso/ + +gdal2tiles.py \ + --zoom=5-14 \ + --processes=4 \ + --tilesize=256 \ + --webviewer=none \ + /tmp/terrain_gen/hypso_full.tif \ + /home/slin/enduro-trails/data/terrain/hypso/ + +echo "Done. Tile count:" +find /home/slin/enduro-trails/data/terrain/hypso/ -name "*.png" | wc -l +``` + +- [ ] **2.3** Проверить результат: + +```bash +# Тайлы не пустые +find /home/slin/enduro-trails/data/terrain/hypso/10/ -name "*.png" -size +400c | wc -l +# Должно быть > 1000 +``` + +**Критерий готовности:** Тайлы зумов 5-14 содержат цветные данные. Гипсометрия видна на карте. + +--- + +## Проверка (Acceptance) + +| # | Проверка | Команда / Действие | Ожидаемый результат | +|---|----------|-------------------|---------------------| +| 1 | VRT не пустой | `gdalinfo -stats srtm.vrt` | MAX > 100 | +| 2 | Тестовый тайл цветной | `file tiles/10/x/y.png` | PNG > 400 байт | +| 3 | UI — гипсометрия видна | Включить на зуме 10 | Цветной overlay | + +--- + +## Ограничения и контекст + +- ⚠️ SSH только через Node.js ssh2 (бинарный ssh сломан) +- ⚠️ gdal2tiles на зумах 5-15 для полного покрытия может занять **несколько часов** — запускать в screen/tmux +- ⚠️ Зум 15 генерит огромное количество тайлов — для теста достаточно 5-14 +- ⚠️ Color ramp: значения <=0 должны быть прозрачными (alpha=0), иначе вода/моря будут цветными +- ⚠️ TMS scheme — gdal2tiles по умолчанию генерит TMS, app.js использует `scheme: 'tms'` — совпадает +- 🚫 Не трогать hillshade тайлы — они рабочие +- 🚫 Task 2 не запускать без подтверждения + +--- + +## Деплой-чеклист + +- [ ] VRT из HGT содержит реальные данные (stats > 0) +- [ ] Тестовый color-relief не пустой +- [ ] Тестовые тайлы зума 10 цветные +- [ ] UI проверка — гипсометрия видна на карте +- [ ] (После подтверждения) Полная генерация запущена +- [ ] Полные тайлы на месте и видны в UI + +--- + +*Создано: 2026-05-13 | Автор ТЗ: Стрим | Исполнитель: Dev-агент* diff --git a/tasks/enduro-trails/reports/dev-2026-05-13-hypso-regen-test.md b/tasks/enduro-trails/reports/dev-2026-05-13-hypso-regen-test.md new file mode 100644 index 0000000..6bfed27 --- /dev/null +++ b/tasks/enduro-trails/reports/dev-2026-05-13-hypso-regen-test.md @@ -0,0 +1,44 @@ +# Dev Report: Тестовая генерация hypso тайлов (Task 1) +Дата: 2026-05-13 +Статус: DONE + +## Задача +Тестовая генерация hypso тайлов из SRTM данных — зум 10, обрезанный участок (Москва). + +## Проблема (root cause) +Оригинальный `gdalbuildvrt` запускался из директории SRTM (`cd /home/slin/.../srtm && gdalbuildvrt ... *.hgt`), но VRT сохранялся в `/tmp/`. В VRT пути к файлам записывались как относительные (`N50E038.hgt`), и при чтении VRT из `/tmp/` GDAL не мог найти файлы → пустой результат. + +**Решение:** использовать `-input_file_list` с абсолютными путями (через `find ... -name "*.hgt" > list.txt`). + +## Сделано +- [x] 1.1 Построен VRT из 67 HGT файлов с абсолютными путями +- [x] 1.2 Сгенерирован color-relief GeoTIFF (bbox 36.5-38.5E, 55.0-56.5N) +- [x] 1.3 Нарезаны тайлы зума 10 (56 тайлов, 40 non-empty >400 байт, крупнейшие ~55KB) +- [x] 1.4 Тайлы скопированы в production директорию, старые забэкаплены + +## Результаты проверок + +| Проверка | Результат | +|----------|-----------| +| VRT stats | MIN=-21, MAX=340 ✅ | +| Crop stats (Moscow) | MIN=84, MAX=298 ✅ | +| Color-relief bands | R max=169, G max=190, B max=105, A max=255 ✅ | +| Тайлы зума 10 | 56 total, 40 non-empty (>400b), max size 55KB ✅ | +| Deploy | `/home/slin/enduro-trails/data/terrain/hypso/10/` — 7 X-dirs (615-621) ✅ | + +## Изменённые файлы (на сервере) +- `/home/slin/enduro-trails/data/terrain/hypso/10/` — новые тайлы (из `/tmp/hypso_test/tiles/10/`) +- `/home/slin/enduro-trails/data/terrain/hypso/10_backup/` — бэкап старых пустых тайлов +- `/tmp/hypso_test/` — рабочая директория (VRT, crop, color-relief, tiles) + +## URL для проверки в UI +``` +https://openclaw.mva154.duckdns.org/enduro/terrain/hypso/10/619/703.png (55KB) +https://openclaw.mva154.duckdns.org/enduro/terrain/hypso/10/620/706.png (47KB) +``` + +## Ключевой урок +При использовании `gdalbuildvrt` с выходным файлом в другой директории — всегда использовать абсолютные пути к исходным файлам (через `-input_file_list` или полные пути в аргументах). Относительные пути в VRT резолвятся от расположения VRT файла, а не от CWD при создании. + +## Следующий шаг +Task 2 (полная генерация зумов 5-14) — ждёт подтверждения от Славы что тест прошёл в UI. diff --git a/tasks/enduro-trails/reports/hypso-test/results.json b/tasks/enduro-trails/reports/hypso-test/results.json new file mode 100644 index 0000000..b1ce741 --- /dev/null +++ b/tasks/enduro-trails/reports/hypso-test/results.json @@ -0,0 +1,40 @@ +{ + "timestamp": "2026-05-13T06:05:01.545Z", + "testFile": "TEST_CASES_UI_TERRAIN_EXT.md", + "results": [ + { + "id": "TC-T-07", + "name": "Гипсометрия на зуме 10", + "viewport": "desktop", + "status": "completed", + "screenshots": [ + "TC-T-07-desktop-hypso-zoom10.png", + "TC-T-07-desktop-check-1778652284169.png" + ], + "checks": [ + { + "description": "Гипсометрия включена на зуме 10. Должен быть виден цветной полупрозрачный слой (зелёные тона для равнины ЦФО) поверх базовой карты.", + "screenshot": "TC-T-07-desktop-check-1778652284169.png" + } + ], + "errors": [] + }, + { + "id": "TC-T-08", + "name": "Hillshade на зуме 11", + "viewport": "desktop", + "status": "completed", + "screenshots": [ + "TC-T-08-desktop-hillshade-zoom11.png", + "TC-T-08-desktop-check-1778652301246.png" + ], + "checks": [ + { + "description": "Оба слоя включены на зуме 11: гипсометрия (цвет) + отмывка (тени). Должны быть видны тени на склонах рельефа.", + "screenshot": "TC-T-08-desktop-check-1778652301246.png" + } + ], + "errors": [] + } + ] +} \ No newline at end of file diff --git a/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-check-1778652284169.png b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-check-1778652284169.png new file mode 100644 index 0000000..5e1a162 Binary files /dev/null and b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-check-1778652284169.png differ diff --git a/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-hypso-zoom10.png b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-hypso-zoom10.png new file mode 100644 index 0000000..5e1a162 Binary files /dev/null and b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-07-desktop-hypso-zoom10.png differ diff --git a/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-check-1778652301246.png b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-check-1778652301246.png new file mode 100644 index 0000000..8222712 Binary files /dev/null and b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-check-1778652301246.png differ diff --git a/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-hillshade-zoom11.png b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-hillshade-zoom11.png new file mode 100644 index 0000000..8222712 Binary files /dev/null and b/tasks/enduro-trails/reports/hypso-test/screenshots/TC-T-08-desktop-hillshade-zoom11.png differ