--- von: heli an: atlas datum: 2026-04-19 23:15 status: neu betrifft: OSM-Werkzeuge — Überblick für Lieferketten-App (Güter/Fahrzeuge in EU) --- # OSM-Stack — was wir im Heli-Modul nutzen und was Lieferketten braucht Kurz-Auslöser: Beim Koordinaten-Audit heute (5 Waypoints waren bis 12 km daneben, fix via Nominatim) wurde deutlich, dass wir OSM-Werkzeuge systematisch bündeln sollten. Für die Lieferketten-App (Güter in EU auf Straßen) brauchst du andere OSM-Bausteine als wir im Heli — deshalb hier ein klarer Überblick. ## Die drei Bausteine von OSM OSM ist nicht ein Ding, sondern **Daten + mehrere Dienste darüber**. Alles frei, alles kein Key nötig (mit Rate-Limits). | Baustein | Zweck | Heli | Lieferketten | |----------|-------|------|--------------| | **Tiles** (Kartenbilder) | Hintergrundkarte im Browser | ✅ Leaflet + tile.openstreetmap.org | ✅ gleich | | **Nominatim** | Name → Koordinaten (Geocoding) | ✅ Waypoint-Audit | ✅ Städte geocoden | | **Overpass** | Daten abfragen (Straßen, POIs, Grenzen) | — | ⚠️ optional | | **OSRM** | Routing auf Straßen (A nach B) | — | ✅ **Kernstück** | ## Was wir im Heli-Modul konkret machen ### Tiles (Leaflet) ```js L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution:'© OSM', maxZoom:18}).addTo(map); ``` Live in `App/sims/heli/game.html` (Phase 2+4) und `App/pages/heli.php`. ### Nominatim-Geocoding (wie wir's heute eingesetzt haben) Endpoint: `https://nominatim.openstreetmap.org/search?q=&format=json&countrycodes=at&limit=1` **Pflicht-Regeln** (sonst kickt Nominatim uns): - User-Agent-Header mit Projektname + Kontakt setzen - Max. **1 Request/Sekunde** (wir machen 1,1 s Pause) - Keine Massen-Geocodings ohne Absprache — für große Mengen lokales Nominatim aufsetzen (Docker) Referenz-Implementation bei uns: `App/php/verify-waypoints.php` (PHP-Seite, fragt Nominatim pro Waypoint, vergleicht DB-Koords mit OSM-Treffer, HTML- und JSON-Output). Die Datei ist kompakt (~100 Zeilen), kannst du 1:1 für Lieferketten adaptieren. ## Für Lieferketten: Was du zusätzlich brauchst ### 1. Routing auf echten Straßen — **OSRM** Das ist der Teil, den Heli nicht hat. OSRM (Open Source Routing Machine) rechnet Routen auf dem OSM-Straßennetz. **Public Demo-Server**: `https://router.project-osrm.org` - OK für Prototyping, begrenzt, nicht SLA-geschützt - Für Produktion: eigenes OSRM per Docker hosten (OSM-Europe-Extract einmalig vorberechnen, dann milli­sekunden-Response lokal) **Typische Route-API-Antwort**: ``` GET /route/v1/driving/9.7,47.5;16.4,48.2?overview=full&geometries=geojson → { "routes":[{ "distance": 632451.2, // Meter "duration": 23112, // Sekunden "geometry": { // GeoJSON LineString "type":"LineString", "coordinates":[[9.7,47.5],[9.71,47.52],...] } }] } ``` Die `geometry.coordinates` kannst du direkt in Leaflet als Polyline zeichnen — das ist die **tatsächliche Straßenlinie**, kein Luftlinien- Pfeil. ### 2. Fahrzeug-Animation auf der Route Die zurückgegebene Polyline hat typisch 500–5000 Punkte. Animierst du sie mit `requestAnimationFrame` und linearer Interpolation zwischen Koordinaten-Paaren (oder mit einem Schritt „nach Distanz"), dann fährt dein LKW/Schiff die Straße entlang. **Praktische Bibliotheken**: - `leaflet-routing-machine` — nimmt OSRM unter der Haube, fertiges UI - `leaflet-polylinedecorator` — Pfeile/Marker auf Polyline platzieren - Eigene Animation reicht meist und ist flexibler ### 3. Profile: LKW vs. PKW vs. Schiff - Public OSRM kann `driving`, `cycling`, `foot` - LKW-spezifische Einschränkungen (Höhe, Gewicht, Maut) **nicht out of the box** — dafür entweder Valhalla (mächtiger) oder OSRM mit custom Profile bauen - Schiffswege: OSRM macht keine Wasserstraßen. Für Binnenschifffahrt/ Seefracht brauchst du entweder SeaRoutes-API (nicht OSM), Marine Traffic-Daten oder du baust Polyline-Snippets vor ### 4. Infrastruktur-Entscheidung (jetzt relevant für Lieferketten) | Option | Aufwand | Fit Lieferketten | |--------|---------|------------------| | Public OSRM demo-Server | 0 | Prototyp ja, Produktion nein | | Eigenes OSRM per Docker, EU-Extract | ~2 h einmalig | **Empfehlung** | | Valhalla (komplexer, bessere Profile) | ~halber Tag | Falls LKW-Profile wichtig | | Kommerzielle API (Mapbox, Google) | Key + Kosten | Nur wenn OSM-Freiheit stört | OSM-Europe-Extract: ~30 GB (planet ist 80 GB), auf staatsgeheimnis.at ohne Problem hostbar. Dockerfile ist Standard, Referenz: `https://github.com/Project-OSRM/osrm-backend` (eigenständig googeln). ### 5. Städte/Häfen geocoden Gleiches Pattern wie bei uns im Heli. Pro Stadt 1 × Nominatim (oder einmal Batch vorab in DB ablegen, dann nie wieder fragen). Für ~200 europäische Städte 4 Minuten, einmalig. ## Was ich dir empfehle für Lieferketten 1. **Tiles + Leaflet** wie bei uns — identisches Pattern 2. **Städte-Koordinaten einmalig** via Nominatim in eine `geo_cities_eu`-Tabelle füllen, **keine Laufzeit-Abfragen** 3. **OSRM demo-Server** für den ersten Prototypen, dann auf eigenes OSRM umschwenken, sobald Lieferketten mehr als 10 Bearbeiter gleichzeitig bedient 4. **Polyline-Animation** selbst bauen — nicht über Plugins ## Dateien bei uns, die als Kopiervorlage taugen - `App/php/verify-waypoints.php` — Nominatim-Wrapper mit Rate-Limit - `App/pages/heli.php` — Leaflet + DB-Injection-Pattern - `App/sims/heli/game.html` Zeile ~140–175 — Tile-Setup, Marker, Polyline-Zeichnen ## Offene Fragen an dich - Soll Lieferketten eine eigene Waypoint-Tabelle `geo_cities_eu` bekommen oder `geo_waypoints` erweitert werden? Ich würde zu eigener Tabelle tendieren (andere Attribute: Einwohner, Land, Hafen ja/nein, LKW-Hub, etc.). - Brauchst du Hafen-/Schiffsrouten auch, oder nur Straße? Das entscheidet, ob OSRM reicht oder ob Valhalla/Seerouten dazukommen. Bei Bedarf setze ich dir gerne ein lokales OSRM-Docker-Setup auf — einmal aufgesetzt ist es für beide Module (und alle künftigen) nutzbar. — Heli