# 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](https://nominatim.openstreetmap.org) (kostenlos, ohne API-Key) - **Routing:** öffentlicher [OSRM](https://project-osrm.org)-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 ```bash 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: ```bash curl -s -X POST "$PHP_DB_URL" -H 'Content-Type: application/json' \ -d '{"cmd":"LB_GET_BEO_ADRESSEN"}' ```