#!/usr/bin/env bash # ============================================================================= # download-data.sh – Kartendaten für den rd13 Tile Server herunterladen # # Verwendung: # ./scripts/download-data.sh [region] # # Regionen: # europe-dach – Deutschland, Österreich, Schweiz (Standard) # germany – nur Deutschland # planet – gesamter Planet (groß!) # satellite – Sentinel-2 cloudless Satellitenkacheln (niedrig/mittel Zoom) # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DATA_DIR="$SCRIPT_DIR/../data" mkdir -p "$DATA_DIR" REGION="${1:-europe-dach}" # ---- OSM-Vektorkacheln via Planetiler ------------------------------------ download_osm() { local region="$1" local jar="$DATA_DIR/planetiler.jar" # Planetiler herunterladen falls nicht vorhanden if [[ ! -f "$jar" ]]; then echo "[OSM] Lade Planetiler herunter..." curl -L -o "$jar" \ "https://github.com/onthegomap/planetiler/releases/latest/download/planetiler.jar" fi case "$region" in germany) AREA="germany" DOWNLOAD="https://download.geofabrik.de/europe/germany-latest.osm.pbf" ;; europe-dach) # DACH als Extrakt AREA="dach" DOWNLOAD="https://download.geofabrik.de/europe/dach-latest.osm.pbf" ;; planet) AREA="planet" DOWNLOAD="" # Planetiler lädt selbst herunter ;; *) echo "Unbekannte Region: $region"; exit 1 ;; esac echo "[OSM] Erzeuge osm.mbtiles für Region: $region" if [[ "$region" == "planet" ]]; then java -Xmx8g -jar "$jar" \ --download \ --output="$DATA_DIR/osm.mbtiles" else # OSM-PBF herunterladen local pbf="$DATA_DIR/${AREA}.osm.pbf" if [[ ! -f "$pbf" ]]; then echo "[OSM] Lade PBF-Datei: $DOWNLOAD" curl -L -o "$pbf" "$DOWNLOAD" fi java -Xmx4g -jar "$jar" \ --area="$AREA" \ --osm-path="$pbf" \ --output="$DATA_DIR/osm.mbtiles" fi echo "[OSM] Fertig: $DATA_DIR/osm.mbtiles" } # ---- Satellit: Sentinel-2 cloudless (OpenMapTiles / maptiler) ------------ download_satellite() { echo "" echo "[Satellit] Hinweis:" echo " Kostenlose Satelliten-MBTiles sind nur für niedrige Zoomstufen (0-10)" echo " verfügbar. Für höhere Auflösung gibt es zwei Optionen:" echo "" echo " 1) NASA GIBS (kostenlos, TMS/WMTS, kein Download nötig):" echo " https://gibs.earthdata.nasa.gov/wmts/" echo " → Einfach in config.json als 'tilejson'-Source eintragen." echo "" echo " 2) Sentinel-2 cloudless (maptiler.com, kostenloser Account für self-hosted):" echo " https://www.maptiler.com/data/satellite-mediumres/" echo " → MBTiles manuell herunterladen und als data/satellite.mbtiles ablegen." echo "" echo " 3) Eigene GeoTIFFs → MBTiles mit gdal2tiles:" echo " gdal2tiles.py --zoom=0-14 input.tif data/satellite/" echo " mb-util data/satellite/ data/satellite.mbtiles" echo "" } # ---- Fonts & Sprites für OSM Bright Style -------------------------------- download_assets() { local fonts_dir="$DATA_DIR/fonts" local sprites_dir="$DATA_DIR/sprites" local styles_dir="$DATA_DIR/styles" mkdir -p "$fonts_dir" "$sprites_dir" "$styles_dir" if [[ ! -d "$fonts_dir/Open Sans Regular" ]]; then echo "[Assets] Lade OpenMapTiles Fonts herunter..." TMP=$(mktemp -d) curl -L -o "$TMP/fonts.zip" \ "https://github.com/openmaptiles/fonts/releases/latest/download/v3.0.zip" \ || { echo "[Assets] Font-Download fehlgeschlagen – bitte manuell von"; \ echo " https://github.com/openmaptiles/fonts/releases herunterladen"; \ rm -rf "$TMP"; } if [[ -f "$TMP/fonts.zip" ]]; then unzip -q "$TMP/fonts.zip" -d "$fonts_dir" rm -rf "$TMP" echo "[Assets] Fonts installiert." fi else echo "[Assets] Fonts bereits vorhanden." fi if [[ ! -d "$styles_dir/osm-bright" ]]; then echo "[Assets] Lade OSM Bright GL Style herunter..." TMP=$(mktemp -d) curl -L -o "$TMP/style.zip" \ "https://github.com/openmaptiles/osm-bright-gl-style/releases/latest/download/v1.9.zip" \ || { echo "[Assets] Style-Download fehlgeschlagen."; rm -rf "$TMP"; } if [[ -f "$TMP/style.zip" ]]; then unzip -q "$TMP/style.zip" -d "$TMP/extracted" mv "$TMP/extracted/"*/ "$styles_dir/osm-bright" rm -rf "$TMP" echo "[Assets] OSM Bright Style installiert." fi else echo "[Assets] OSM Bright Style bereits vorhanden." fi } # ---- Hauptlogik ---------------------------------------------------------- echo "=== rd13 Tile Server – Daten-Download ===" echo "Region: $REGION" echo "" if [[ "$REGION" == "satellite" ]]; then download_satellite else download_osm "$REGION" download_assets download_satellite fi echo "" echo "=== Abgeschlossen ===" echo "Starte den Server mit: docker compose up -d"