Übersicht
Base-URL: https://osm.meyer-edv.cloud
Format: JSON (UTF-8) bzw. PNG für Tiles. CORS für alle Origins offen.
Authentifizierung
API-Token sind optional, aber für Abrechnung & Statistik erforderlich. Tokens werden im Admin verwaltet.
Header (empfohlen)
X-API-Token: osm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Query-Parameter
?token=osm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bei ungültigem Token: 401 Unauthorized. Fehler-Antworten (4xx/5xx) werden nicht abgerechnet.
GETKarten-Tiles
/api/tile/{z}/{x}/{y}.png
Slippy-Map-Tiles im Web-Mercator-Schema (256×256, PNG).
| Param | Wert |
|---|---|
z | Zoomstufe 0–20 |
x / y | Tile-Koordinaten |
curl "https://osm.meyer-edv.cloud/api/tile/6/33/21.png" -o tile.pngL.tileLayer('https://osm.meyer-edv.cloud/api/tile/{z}/{x}/{y}.png', { maxZoom: 20, attribution: '© OpenStreetMap contributors' }).addTo(map);
Aktuell: Daten für DE + Europa rendern. Welt-Import läuft im Hintergrund — Tiles außerhalb EU rendern erst nach dessen Abschluss.
GETForward Geocoding (Adresse → Koordinaten)
/api/geocode?q={query}&limit=5&lang=de
| Param | Default | Beschreibung |
|---|---|---|
q | — | Suchbegriff (Pflicht) |
limit | 5 | Max. Treffer (1–50) |
lang | en | Sprache: de, en, fr, it |
curl "https://osm.meyer-edv.cloud/api/geocode?q=Brandenburger+Tor&lang=de"const r = await fetch( `https://osm.meyer-edv.cloud/api/geocode?q=${encodeURIComponent('Brandenburger Tor')}&lang=de`, { headers: { 'X-API-Token': 'osm_…' } }); const { results } = await r.json();
import requests r = requests.get('https://osm.meyer-edv.cloud/api/geocode', params={'q': 'Brandenburger Tor', 'lang': 'de'}, headers={'X-API-Token': 'osm_…'}) print(r.json()['results'][0])
Antwort
{
"results": [
{
"lat": 52.5163, "lon": 13.3777,
"display_name": "Brandenburger Tor, Pariser Platz, …",
"type": "attraction",
"osm_type": "W", "osm_id": 12345,
"properties": { /* alle Photon-Felder */ }
}
]
}
GETReverse Geocoding (Koordinaten → Adresse)
/api/reverse?lat={lat}&lon={lon}&lang=de
| Param | Default | Beschreibung |
|---|---|---|
lat | — | Breitengrad (Pflicht) |
lon | — | Längengrad (Pflicht) |
lang | en | Sprache |
curl "https://osm.meyer-edv.cloud/api/reverse?lat=52.52&lon=13.41&lang=de"
Antwort
{
"lat": 52.52, "lon": 13.41,
"address": "Alexanderplatz",
"street": "…", "housenumber": "…",
"postcode": "10178", "city": "Berlin",
"country": "Deutschland",
"display_name": "…"
}
POSTRouting (Navigation)
/api/route
Berechnet Route inkl. Distanz, Dauer, Geometrie und Abbiege-Anweisungen.
Request-Body (JSON)
| Feld | Default | Beschreibung |
|---|---|---|
from | — | [lat, lon] |
to | — | [lat, lon] |
mode | car | car · pedestrian · bicycle |
curl -X POST https://osm.meyer-edv.cloud/api/route \ -H "Content-Type: application/json" \ -H "X-API-Token: osm_…" \ -d '{"from":[52.52,13.40],"to":[48.14,11.58],"mode":"car"}'
const r = await fetch('https://osm.meyer-edv.cloud/api/route', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Token': 'osm_…' }, body: JSON.stringify({ from: [52.52, 13.40], to: [48.14, 11.58], mode: 'car' }) }); const route = await r.json(); // L.polyline(route.geometry).addTo(map);
import requests r = requests.post('https://osm.meyer-edv.cloud/api/route', json={'from':[52.52,13.40], 'to':[48.14,11.58], 'mode':'car'}, headers={'X-API-Token': 'osm_…'})
Antwort
{
"distance": 584.2, // km
"duration": 19440, // Sekunden
"distance_unit": "km",
"duration_unit": "seconds",
"geometry": [[52.52,13.40], /* … [lat,lon] Polyline */],
"instructions": [
{ "instruction": "Fahren Sie nach Süden …",
"distance": 0.5, "time": 30,
"street_names": ["Alexanderstraße"] }
]
}
Aktuell: Routing nur für Deutschland verfügbar. EU+Welt folgen, sobald die Routing-Tiles erneut gebaut werden.
GETHealth-Check
/api/health
curl https://osm.meyer-edv.cloud/api/health
{"status":"ok","services":{ … }}
Komplettes Beispiel: Karte + Suche + Route in HTML
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script> <div id="map" style="height:500px"></div> <script> const API = 'https://osm.meyer-edv.cloud'; const TOKEN = 'osm_…'; const H = { 'X-API-Token': TOKEN }; const map = L.map('map').setView([51.16, 10.45], 6); L.tileLayer(`${API}/api/tile/{z}/{x}/{y}.png?token=${TOKEN}`, {maxZoom:20}).addTo(map); async function route(a, b) { const r = await fetch(`${API}/api/route`, { method:'POST', headers:{...H, 'Content-Type':'application/json'}, body: JSON.stringify({from:a, to:b, mode:'car'}) }); const d = await r.json(); L.polyline(d.geometry, {color:'#06f', weight:5}).addTo(map); } </script>
Powered by OpenStreetMap · osm2pgsql + Mapnik · Photon · Valhalla