#!/usr/bin/env bash # # Monatlicher POI-Refresh (Build 4) — läuft im Docker-Container auf der Synology. # download → tags-filter (RAM-schonend) → extract → load in die Produktiv-DB. # Ersetzt das Live-Overpass-Scannen (war Bann-Quelle). # # Erst-Migration ohne 5,7-GB-Download: vorab gebaute dach.sqlite mitliefern und # PREBUILT_SQLITE=/data/dach.sqlite setzen → überspringt download/extract. # set -euo pipefail DB="${DB_PATH:-/data/banyaro.db}" WORK="${WORK_DIR:-/work}" # Default = TILES_REGIONS im Makefile (Karten- und POI-Abdeckung synchron halten). # Produktiv setzt docker-compose.osm.yml die Liste zusätzlich per Env. COUNTRIES="${COUNTRIES:-germany austria switzerland france italy czech-republic poland slovakia hungary slovenia netherlands belgium luxembourg denmark liechtenstein}" GEOFABRIK="${GEOFABRIK_BASE:-https://download.geofabrik.de/europe}" KEEP_BACKUPS="${KEEP_BACKUPS:-3}" PREBUILT_SQLITE="${PREBUILT_SQLITE:-}" # OSM-Tags für die 9 Ban-Yaro-Kategorien (Superset; finale Klassifikation macht # extract_osm_pois.py). nw/ = node+way, referenzierte Knoten bleiben für die # Weg-Geometrie automatisch erhalten. FILTER=( "nw/amenity=waste_basket,drinking_water,veterinary,bench,biergarten,restaurant,cafe" "nw/leisure=dog_park,park" "nw/shop=pet,pet_grooming" "nw/craft=pet_grooming" "nw/tourism=hotel,guest_house,hostel" ) mkdir -p "$WORK"; cd "$WORK" echo "[$(date -u)] POI-Refresh start → $DB" # 1) Sicherheitskopie der Produktiv-DB (nur die letzten N behalten) if [ -f "$DB" ]; then bak="${DB%.db}.pre-osm-$(date -u +%Y%m%d).db" cp -p "$DB" "$bak" echo "Backup: $bak" ls -1t "${DB%.db}".pre-osm-*.db 2>/dev/null | tail -n +$((KEEP_BACKUPS + 1)) | xargs -r rm -f fi # 2a) Schnellweg: vorab gebauten Extrakt direkt laden (kein Download/Extract) if [ -n "$PREBUILT_SQLITE" ]; then [ -f "$PREBUILT_SQLITE" ] || { echo "FEHLER: $PREBUILT_SQLITE nicht gefunden"; exit 1; } echo "[$(date -u)] PREBUILT_SQLITE=$PREBUILT_SQLITE → überspringe download/extract" python3 /app/load_into_prod.py "$PREBUILT_SQLITE" "$DB" echo "[$(date -u)] POI-Refresh (prebuilt) fertig." exit 0 fi # 2b) Regulärer Monatslauf: frisch holen + extrahieren rm -f dach.sqlite for c in $COUNTRIES; do echo "[$(date -u)] $c: download" curl -fSL --retry 3 -o "$c.osm.pbf" "$GEOFABRIK/$c-latest.osm.pbf" echo "[$(date -u)] $c: tags-filter" osmium tags-filter --overwrite -o "$c.f.osm.pbf" "$c.osm.pbf" "${FILTER[@]}" rm -f "$c.osm.pbf" echo "[$(date -u)] $c: extract" python3 /app/extract_osm_pois.py "$c.f.osm.pbf" dach.sqlite rm -f "$c.f.osm.pbf" done echo "[$(date -u)] load → Produktiv-DB" python3 /app/load_into_prod.py dach.sqlite "$DB" rm -f dach.sqlite echo "[$(date -u)] POI-Refresh fertig."