48aaf82899
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
# 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"}'
|
|
```
|