This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/geo-service/scripts/download_dem.sh
Benjamin Admin 21a844cb8a fix: Restore all files lost during destructive rebase
A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:51:32 +01:00

199 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
# ============================================
# Copernicus DEM Download Script for GeoEdu Service
# ============================================
#
# WICHTIG: Dieses Script startet einen Download von ca. 20-40 GB!
# Nur nach expliziter Freigabe ausfuehren!
#
# Quelle: Copernicus Data Space Ecosystem
# Daten: GLO-30 DEM (30m Aufloesung)
# Lizenz: Copernicus Data (frei, Attribution erforderlich)
# Attribution: © Copernicus Service Information
#
# Voraussetzungen:
# - Copernicus Data Space Account (kostenlos)
# - Credentials in ~/.netrc oder als Umgebungsvariablen
#
# Nutzung:
# ./download_dem.sh [--dry-run] [--bbox west,south,east,north]
#
# Beispiel (nur Bayern):
# ./download_dem.sh --bbox 8.97,47.27,13.84,50.56
#
# ============================================
set -e
# Configuration
DATA_DIR="${DEM_DATA_DIR:-/app/data/dem}"
COPERNICUS_URL="https://dataspace.copernicus.eu"
# Germany bounding box (default)
BBOX_WEST="${BBOX_WEST:-5.87}"
BBOX_SOUTH="${BBOX_SOUTH:-47.27}"
BBOX_EAST="${BBOX_EAST:-15.04}"
BBOX_NORTH="${BBOX_NORTH:-55.06}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}============================================${NC}"
echo -e "${YELLOW}GeoEdu Service - Copernicus DEM Download${NC}"
echo -e "${YELLOW}============================================${NC}"
echo ""
echo -e "Quelle: ${GREEN}Copernicus Data Space${NC}"
echo -e "Daten: ${GREEN}GLO-30 DEM (30m Aufloesung)${NC}"
echo -e "Groesse: ${YELLOW}~20-40 GB (Deutschland komplett)${NC}"
echo -e "Lizenz: ${GREEN}Copernicus Data (frei)${NC}"
echo -e "Attribution: ${GREEN}© Copernicus Service Information${NC}"
echo ""
# Parse arguments
DRY_RUN=false
while [[ $# -gt 0 ]]; do
case $1 in
--dry-run)
DRY_RUN=true
shift
;;
--bbox)
IFS=',' read -r BBOX_WEST BBOX_SOUTH BBOX_EAST BBOX_NORTH <<< "$2"
shift 2
;;
*)
echo "Unbekannte Option: $1"
exit 1
;;
esac
done
echo "Bounding Box:"
echo " West: $BBOX_WEST"
echo " Sued: $BBOX_SOUTH"
echo " Ost: $BBOX_EAST"
echo " Nord: $BBOX_NORTH"
echo ""
# Calculate required tiles
# Copernicus DEM tiles are 1°x1° cells
calc_tiles() {
local west=$(echo "$BBOX_WEST" | cut -d. -f1)
local south=$(echo "$BBOX_SOUTH" | cut -d. -f1)
local east=$(echo "$BBOX_EAST" | cut -d. -f1)
local north=$(echo "$BBOX_NORTH" | cut -d. -f1)
# Adjust for negative values
west=$((west < 0 ? west : west))
local count=0
for lat in $(seq $south $north); do
for lon in $(seq $west $east); do
count=$((count + 1))
done
done
echo $count
}
TILE_COUNT=$(calc_tiles)
ESTIMATED_SIZE=$((TILE_COUNT * 50)) # ~50 MB per tile
echo "Benoetigte Tiles: $TILE_COUNT"
echo "Geschaetzte Groesse: ~${ESTIMATED_SIZE} MB"
echo ""
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}[DRY-RUN] Kein Download wird durchgefuehrt.${NC}"
echo ""
echo "Wuerde folgende Tiles herunterladen:"
echo ""
for lat in $(seq $(echo "$BBOX_SOUTH" | cut -d. -f1) $(echo "$BBOX_NORTH" | cut -d. -f1)); do
for lon in $(seq $(echo "$BBOX_WEST" | cut -d. -f1) $(echo "$BBOX_EAST" | cut -d. -f1)); do
lat_prefix=$([ $lat -ge 0 ] && echo "N" || echo "S")
lon_prefix=$([ $lon -ge 0 ] && echo "E" || echo "W")
printf " %s%02d%s%03d.tif\n" "$lat_prefix" "${lat#-}" "$lon_prefix" "${lon#-}"
done
done
echo ""
exit 0
fi
# Confirm download
echo -e "${RED}ACHTUNG: Download startet ~${ESTIMATED_SIZE} MB Daten!${NC}"
echo ""
read -p "Download starten? (j/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[JjYy]$ ]]; then
echo "Download abgebrochen."
exit 1
fi
# Create data directory
mkdir -p "$DATA_DIR"
cd "$DATA_DIR"
# Check for AWS CLI (preferred method for Copernicus)
if ! command -v aws &> /dev/null; then
echo -e "${YELLOW}HINWEIS: AWS CLI nicht installiert.${NC}"
echo "Installiere mit: pip install awscli"
echo ""
echo "Alternative: Manueller Download von:"
echo " https://dataspace.copernicus.eu/explore-data/data-collections/copernicus-contributing-missions/collections-description/COP-DEM"
exit 1
fi
# Download tiles
echo ""
echo -e "${GREEN}Starte Download...${NC}"
DOWNLOADED=0
FAILED=0
for lat in $(seq $(echo "$BBOX_SOUTH" | cut -d. -f1) $(echo "$BBOX_NORTH" | cut -d. -f1)); do
for lon in $(seq $(echo "$BBOX_WEST" | cut -d. -f1) $(echo "$BBOX_EAST" | cut -d. -f1)); do
lat_prefix=$([ $lat -ge 0 ] && echo "N" || echo "S")
lon_prefix=$([ $lon -ge 0 ] && echo "E" || echo "W")
lat_abs=${lat#-}
lon_abs=${lon#-}
filename=$(printf "%s%02d%s%03d.tif" "$lat_prefix" "$lat_abs" "$lon_prefix" "$lon_abs")
if [ -f "$filename" ]; then
echo "$filename (bereits vorhanden)"
DOWNLOADED=$((DOWNLOADED + 1))
continue
fi
echo "$filename"
# Copernicus DEM S3 bucket path
# Format: s3://copernicus-dem-30m/Copernicus_DSM_COG_10_N47_00_E008_00_DEM/
s3_path="s3://copernicus-dem-30m/Copernicus_DSM_COG_10_${lat_prefix}${lat_abs}_00_${lon_prefix}${lon_abs}_00_DEM/"
if aws s3 cp "${s3_path}Copernicus_DSM_COG_10_${lat_prefix}${lat_abs}_00_${lon_prefix}${lon_abs}_00_DEM.tif" "$filename" --no-sign-request 2>/dev/null; then
DOWNLOADED=$((DOWNLOADED + 1))
else
echo -e " ${YELLOW}(nicht verfuegbar)${NC}"
FAILED=$((FAILED + 1))
fi
done
done
echo ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}Download abgeschlossen${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
echo "Heruntergeladen: $DOWNLOADED Tiles"
echo "Nicht verfuegbar: $FAILED Tiles"
echo "Speicherort: $DATA_DIR"
echo ""
echo -e "${YELLOW}Naechster Schritt:${NC}"
echo " Die Tiles werden automatisch vom geo-service geladen."