Files

km_berechnen

Berechnet die Straßenentfernung (km) zwischen der fixen Sternwarte Welzheim und dem Wohnort jedes BEOs (Tabelle beos) und schreibt das Ergebnis in die vorhandene Spalte beos.km.

Der DB-Zugriff läuft über den PHP-Proxy DB4js_all.php, da die echte Sternwarte-Datenbank nicht direkt erreichbar ist:

  • Lesen: cmd = LB_GET_BEO_ADRESSEN (BEOs mit Adresse + km)
  • Schreiben: cmd = LB_UPDATE_BEO_KM { id, km }

Distanzberechnung:

  • Geocoding: OpenStreetMap Nominatim (kostenlos, ohne API-Key)
  • Routing: öffentlicher OSRM-Server (kostenlos, ohne API-Key)

Einrichtung

  1. .env öffnen und PHP_DB_URL auf den DB4js-Endpunkt setzen (lokal: http://localhost:8080/DB4js_all.php). Falls der Proxy Basic-Auth verlangt, zusätzlich API_USER / API_PASS eintragen.
  2. Optional den exakten Referenzpunkt der Sternwarte setzen (STERNWARTE_LAT / STERNWARTE_LON) — sonst wird er per Nominatim ermittelt, mit Ortsmitte Welzheim als Fallback.

Es werden nur Node-Bordmittel verwendet (globales fetch) — kein npm install nötig (Node ≥ 18).

Ausführen

cd km_berechnen
node --env-file=.env berechne-km.mjs           # berechnen und in beos.km schreiben
node --env-file=.env berechne-km.mjs --dry-run  # nur berechnen/anzeigen, DB unverändert

Hinweise

  • Geocoding-Ergebnisse werden in geocode-cache.json zwischengespeichert; ein zweiter Lauf ist dadurch deutlich schneller. Zum Neu-Geocodieren die Datei löschen.
  • Nominatim erlaubt max. 1 Anfrage/Sekunde — das Skript hält dies automatisch ein.
  • BEOs ohne (vollständige) Adresse bzw. ohne Geocoding-/Routing-Treffer erhalten km = NULL und werden am Ende aufgelistet.
  • Die öffentlichen Nominatim-/OSRM-Server sind „Fair Use"; für die ~20 BEOs unproblematisch.
  • Die beiden Proxy-Kommandos (LB_GET_BEO_ADRESSEN, LB_UPDATE_BEO_KM) sind in DB4js_all.php implementiert.

Ergebnis prüfen

Per Proxy:

curl -s -X POST "$PHP_DB_URL" -H 'Content-Type: application/json' \
  -d '{"cmd":"LB_GET_BEO_ADRESSEN"}'