POI-Karte: Offline-Import aus OSM statt Live-Overpass-Scan (Build 4)
- osm.py: Live-Scanner deaktiviert — /pois liest nur noch aus DB, /analyze ist No-Op. Behebt wiederholte OSM-Banns (Tile-Load + Scanning). - tools/osm-extract: Extraktion (pyosmium) + Loader (schützt user_edited) + Docker-Refresh-Job mit osmium-tags-filter-Vorstufe (RAM-schonend). - docker-compose.osm.yml: Refresh-Service (mem_limit 4g), monatlich via DSM-Aufgabenplaner.
This commit is contained in:
parent
214543559c
commit
4bc7454258
9 changed files with 457 additions and 26 deletions
66
tools/osm-extract/refresh.sh
Normal file
66
tools/osm-extract/refresh.sh
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#!/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}"
|
||||
COUNTRIES="${COUNTRIES:-switzerland austria germany}"
|
||||
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."
|
||||
Loading…
Add table
Add a link
Reference in a new issue