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.
68 lines
2.7 KiB
Bash
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."
|