Files
wiki/tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md
2026-05-13 09:10:03 +03:00

230 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-агент*