From 9adb0a5d13cc5edd6bbabe5a8d287d0f70838800 Mon Sep 17 00:00:00 2001 From: Stream Date: Wed, 13 May 2026 12:30:09 +0300 Subject: [PATCH] auto-sync: 2026-05-13 12:30:01 --- .../scripts/download_kurviger.sh | 29 ++++++ tasks/enduro-trails/scripts/download_srtm.py | 46 ++++++++++ .../enduro-trails/scripts/download_srtm_v2.py | 49 ++++++++++ tasks/enduro-trails/scripts/regen_all.sh | 92 +++++++++++++++++++ 4 files changed, 216 insertions(+) create mode 100644 tasks/enduro-trails/scripts/download_kurviger.sh create mode 100644 tasks/enduro-trails/scripts/download_srtm.py create mode 100644 tasks/enduro-trails/scripts/download_srtm_v2.py create mode 100644 tasks/enduro-trails/scripts/regen_all.sh diff --git a/tasks/enduro-trails/scripts/download_kurviger.sh b/tasks/enduro-trails/scripts/download_kurviger.sh new file mode 100644 index 0000000..af35a2e --- /dev/null +++ b/tasks/enduro-trails/scripts/download_kurviger.sh @@ -0,0 +1,29 @@ +#!/bin/bash +set -e + +cd /home/slin/enduro-trails/data/srtm +BASE="https://srtm.kurviger.de/SRTM3/Eurasia" + +echo 'Downloading from kurviger mirror...' +for lat in 54 55 56; do + for lon in 041 042 043 044 045 046; do + f="N${lat}E${lon}" + if [ -f "${f}.hgt" ]; then + echo " EXISTS: ${f}" + continue + fi + wget -q --timeout=60 "${BASE}/${f}.hgt.zip" -O "/tmp/${f}.hgt.zip" 2>/dev/null + if [ -s "/tmp/${f}.hgt.zip" ]; then + unzip -o -q "/tmp/${f}.hgt.zip" -d . && echo " OK: ${f} ($(du -h ${f}.hgt | cut -f1))" || echo " UNZIP FAIL: ${f}" + rm -f "/tmp/${f}.hgt.zip" + else + echo " NOT FOUND: ${f}" + rm -f "/tmp/${f}.hgt.zip" + fi + done +done + +echo '' +echo "Total HGT: $(ls *.hgt | wc -l)" +echo "New E041-E046 (N54-56):" +ls N5[456]E04[1-6].hgt 2>/dev/null | sort diff --git a/tasks/enduro-trails/scripts/download_srtm.py b/tasks/enduro-trails/scripts/download_srtm.py new file mode 100644 index 0000000..d7277c8 --- /dev/null +++ b/tasks/enduro-trails/scripts/download_srtm.py @@ -0,0 +1,46 @@ +import urllib.request +import zipfile +import os +import sys + +SRTM_DIR = '/home/slin/enduro-trails/data/srtm' +BASE_URL = 'https://srtm.kurviger.de/SRTM3/Eurasia' + +tiles = [] +for lat in [54, 55, 56]: + for lon in range(41, 47): + tiles.append(f'N{lat}E{lon:03d}') + +os.chdir(SRTM_DIR) +count = 0 + +for tile in tiles: + hgt = f'{tile}.hgt' + if os.path.exists(hgt): + print(f' EXISTS: {hgt}') + continue + + url = f'{BASE_URL}/{tile}.hgt.zip' + tmp = f'/tmp/{tile}.hgt.zip' + + try: + print(f' Downloading {tile}...', end=' ', flush=True) + urllib.request.urlretrieve(url, tmp) + + if os.path.getsize(tmp) > 0: + with zipfile.ZipFile(tmp, 'r') as z: + z.extractall('.') + os.remove(tmp) + size = os.path.getsize(hgt) if os.path.exists(hgt) else 0 + print(f'OK ({size // 1024}KB)') + count += 1 + else: + print('EMPTY') + os.remove(tmp) + except Exception as e: + print(f'FAIL: {e}') + if os.path.exists(tmp): + os.remove(tmp) + +print(f'\nDownloaded: {count} new files') +print(f'Total HGT: {len([f for f in os.listdir(".") if f.endswith(".hgt")])}') diff --git a/tasks/enduro-trails/scripts/download_srtm_v2.py b/tasks/enduro-trails/scripts/download_srtm_v2.py new file mode 100644 index 0000000..8714212 --- /dev/null +++ b/tasks/enduro-trails/scripts/download_srtm_v2.py @@ -0,0 +1,49 @@ +import urllib.request +import zipfile +import os + +SRTM_DIR = '/home/slin/enduro-trails/data/srtm' +BASE_URL = 'https://srtm.kurviger.de/SRTM3/Eurasia' + +tiles = [] +for lat in [54, 55, 56]: + for lon in range(41, 47): + tiles.append(f'N{lat}E{lon:03d}') + +os.chdir(SRTM_DIR) +count = 0 + +opener = urllib.request.build_opener() +opener.addheaders = [('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36')] +urllib.request.install_opener(opener) + +for tile in tiles: + hgt = f'{tile}.hgt' + if os.path.exists(hgt): + print(f' EXISTS: {hgt}') + continue + + url = f'{BASE_URL}/{tile}.hgt.zip' + tmp = f'/tmp/{tile}.hgt.zip' + + try: + print(f' Downloading {tile}...', end=' ', flush=True) + urllib.request.urlretrieve(url, tmp) + + if os.path.getsize(tmp) > 0: + with zipfile.ZipFile(tmp, 'r') as z: + z.extractall('.') + os.remove(tmp) + size = os.path.getsize(hgt) if os.path.exists(hgt) else 0 + print(f'OK ({size // 1024}KB)') + count += 1 + else: + print('EMPTY') + os.remove(tmp) + except Exception as e: + print(f'FAIL: {e}') + if os.path.exists(tmp): + os.remove(tmp) + +print(f'\nDownloaded: {count} new files') +print(f'Total HGT: {len([f for f in os.listdir(".") if f.endswith(".hgt")])}') diff --git a/tasks/enduro-trails/scripts/regen_all.sh b/tasks/enduro-trails/scripts/regen_all.sh new file mode 100644 index 0000000..fd6446d --- /dev/null +++ b/tasks/enduro-trails/scripts/regen_all.sh @@ -0,0 +1,92 @@ +#!/bin/bash +set -e + +echo '=== FULL REGENERATION (81 HGT files) ===' +echo "Start: $(date)" + +SRTM_DIR='/home/slin/enduro-trails/data/srtm' +TERRAIN_DIR='/home/slin/enduro-trails/data/terrain' +TMP='/tmp/regen_full' + +rm -rf $TMP +mkdir -p $TMP + +echo '' +echo '=== Step 1: Build VRT ===' +find $SRTM_DIR -name '*.hgt' > $TMP/file_list.txt +gdalbuildvrt -vrtnodata -32768 -overwrite -input_file_list $TMP/file_list.txt $TMP/srtm_all.vrt 2>&1 +echo "VRT: $(wc -l < $TMP/file_list.txt) files" +gdalinfo -stats $TMP/srtm_all.vrt 2>&1 | grep STATISTICS + +echo '' +echo '=== Step 2: Generate HYPSO ===' +cat > $TMP/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 + +gdaldem color-relief $TMP/srtm_all.vrt $TMP/color_ramp.txt $TMP/hypso.tif -alpha -of GTiff -co COMPRESS=LZW -co BIGTIFF=YES 2>&1 +echo "Hypso TIF: $(du -sh $TMP/hypso.tif | cut -f1)" + +rm -rf ${TERRAIN_DIR}/hypso +mkdir -p ${TERRAIN_DIR}/hypso +gdal2tiles.py --zoom=5-12 --processes=4 --tilesize=256 --webviewer=none $TMP/hypso.tif ${TERRAIN_DIR}/hypso/ 2>&1 +echo "Hypso tiles: $(find ${TERRAIN_DIR}/hypso -name '*.png' | wc -l)" + +echo '' +echo '=== Step 3: Generate TRI ===' +gdaldem TRI $TMP/srtm_all.vrt $TMP/tri_raw.tif -of GTiff -co COMPRESS=LZW -co BIGTIFF=YES -compute_edges 2>&1 + +cat > $TMP/tri_color.txt << 'EOF' +nv 0 0 0 0 +0 0 0 0 0 +2 0 0 0 0 +3 255 255 100 60 +4 255 230 50 100 +5 255 200 0 140 +7 255 150 0 180 +10 255 100 0 200 +15 230 50 0 220 +20 200 0 0 235 +30 180 0 50 245 +50 150 0 100 255 +EOF + +gdaldem color-relief $TMP/tri_raw.tif $TMP/tri_color.txt $TMP/tri_colored.tif -alpha -of GTiff -co COMPRESS=LZW -co BIGTIFF=YES 2>&1 +echo "TRI TIF: $(du -sh $TMP/tri_colored.tif | cut -f1)" + +rm -rf ${TERRAIN_DIR}/tri +mkdir -p ${TERRAIN_DIR}/tri +gdal2tiles.py --zoom=5-12 --processes=4 --tilesize=256 --webviewer=none $TMP/tri_colored.tif ${TERRAIN_DIR}/tri/ 2>&1 +echo "TRI tiles: $(find ${TERRAIN_DIR}/tri -name '*.png' | wc -l)" + +echo '' +echo '=== Stats ===' +echo "Hypso:" +for z in 8 9 10 11 12; do + echo " zoom $z: $(find ${TERRAIN_DIR}/hypso/$z -name '*.png' -size +400c 2>/dev/null | wc -l) non-empty" +done +echo "TRI:" +for z in 8 9 10 11 12; do + echo " zoom $z: $(find ${TERRAIN_DIR}/tri/$z -name '*.png' -size +400c 2>/dev/null | wc -l) non-empty" +done + +echo '' +echo "=== DONE ===" +echo "End: $(date)"