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>
199 lines
5.9 KiB
Bash
Executable File
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."
|