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:
steffen1971 2026-06-20 21:20:17 +02:00
commit 5d967c68b5
40 changed files with 2040 additions and 0 deletions

30
rides/services.py Normal file
View 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