# 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-агент*