Add Radeln ohne Alter ride-coordination demo (Django + HTMX + Leaflet)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
commit
5d967c68b5
40 changed files with 2040 additions and 0 deletions
30
rides/services.py
Normal file
30
rides/services.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
"""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
|
||||
Loading…
Add table
Add a link
Reference in a new issue