"""Routing: holt eine Fahrtroute zwischen zwei Punkten. Bewusst hinter einer einzigen Funktion gekapselt. Für die Demo nutzen wir den öffentlichen OSRM-Demo-Server (kein API-Key). Für Produktion lässt sich hier problemlos OpenRouteService oder ein self-hosted OSRM einhängen, ohne dass der Rest der App es merkt. """ from __future__ import annotations import requests OSRM_BASE = "https://router.project-osrm.org" Point = tuple[float, float] # (lat, lng) def route_geojson(start: Point, end: Point) -> dict | None: """Route Start→Ziel als GeoJSON-LineString. None bei Fehler/Offline. Die Karte fällt in dem Fall auf eine gestrichelte Luftlinie zurück. """ s_lat, s_lng = start e_lat, e_lng = end url = f"{OSRM_BASE}/route/v1/driving/{s_lng},{s_lat};{e_lng},{e_lat}" try: resp = requests.get(url, params={"overview": "full", "geometries": "geojson"}, timeout=8) resp.raise_for_status() return resp.json()["routes"][0]["geometry"] except (requests.RequestException, KeyError, IndexError, ValueError): return None