auto-sync: 2026-05-13 09:10:01
This commit is contained in:
229
tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md
Normal file
229
tasks/enduro-trails/DEV_TASK_HYPSO_REGEN.md
Normal file
@@ -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-агент*
|
||||
@@ -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.
|
||||
40
tasks/enduro-trails/reports/hypso-test/results.json
Normal file
40
tasks/enduro-trails/reports/hypso-test/results.json
Normal file
@@ -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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
Reference in New Issue
Block a user