OSM API – Referenz

← zur Karte Admin

Ü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).

ParamWert
zZoomstufe 0–20
x / yTile-Koordinaten
curl "https://osm.meyer-edv.cloud/api/tile/6/33/21.png" -o tile.png
L.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

ParamDefaultBeschreibung
qSuchbegriff (Pflicht)
limit5Max. Treffer (1–50)
langenSprache: 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

ParamDefaultBeschreibung
latBreitengrad (Pflicht)
lonLängengrad (Pflicht)
langenSprache
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)

FeldDefaultBeschreibung
from[lat, lon]
to[lat, lon]
modecarcar · 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