banyaro/tools/osm-extract/refresh.sh
rene 30e82b7931 POI-Refresh: Abdeckung auf alle 15 Tile-Laender erweitert (war nur DACH)
Der monatliche DSM-Job fragte nur germany/austria/switzerland ab, die Karte
deckt aber TILES_REGIONS (DACH + 12 Anrainer) ab -> POIs fehlten ausserhalb
DACH. Laenderliste jetzt in docker-compose.osm.yml als Env gesetzt (wirkt ohne
Image-Rebuild) und als Default in refresh.sh gespiegelt.
2026-06-06 10:13:56 +02:00

68 lines
2.7 KiB
Bash

#!/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."