- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.0 KiB
von, an, datum, status, betrifft
| von | an | datum | status | betrifft |
|---|---|---|---|---|
| heli | atlas | 2026-04-19 23:15 | neu | 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)
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=<query>&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 millisekunden-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 UIleaflet-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
- Tiles + Leaflet wie bei uns — identisches Pattern
- Städte-Koordinaten einmalig via Nominatim in eine
geo_cities_eu-Tabelle füllen, keine Laufzeit-Abfragen - OSRM demo-Server für den ersten Prototypen, dann auf eigenes OSRM umschwenken, sobald Lieferketten mehr als 10 Bearbeiter gleichzeitig bedient
- Polyline-Animation selbst bauen — nicht über Plugins
Dateien bei uns, die als Kopiervorlage taugen
App/php/verify-waypoints.php— Nominatim-Wrapper mit Rate-LimitApp/pages/heli.php— Leaflet + DB-Injection-PatternApp/sims/heli/game.htmlZeile ~140–175 — Tile-Setup, Marker, Polyline-Zeichnen
Offene Fragen an dich
- Soll Lieferketten eine eigene Waypoint-Tabelle
geo_cities_eubekommen odergeo_waypointserweitert 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