Anleitungen

Höhendaten zu einer GPX-Routendatei hinzufügen

Eine GPX-Datei, die mit einem Smartphone oder einem einfachen GPS-Gerät aufgezeichnet wurde, enthält oft Höhenwerte, die ganz fehlen oder merklich ungenau sind, da die Höhenangaben von Consumer-GPS meist weit weniger zuverlässig sind als die aufgezeichneten Breiten- und Längengrade.

Die Punkte extrahieren

Parsen Sie die Trackpunkte der GPX-Datei, entnehmen Sie für jeden nur Breiten- und Längengrad und verwerfen Sie die vorhandenen Höhenwerte, die Sie ersetzen möchten.

<trkpt lat="45.8326" lon="6.8652"><ele>1050</ele></trkpt>

Die korrekte Höhe abfragen

Senden Sie die extrahierten Koordinaten an /v1/elevation, entweder über den Parameter points bei einer kleineren Datei oder als Array per Bulk-POST bei einer größeren.

POST /v1/elevation
Content-Type: application/json

[{"lat": 45.8326, "lon": 6.8652}, {"lat": 45.8400, "lon": 6.8700}]
{
  "status": "ok",
  "results": [
    {"lat": 45.8326, "lon": 6.8652, "elevation_m": 1035},
    {"lat": 45.8400, "lon": 6.8700, "elevation_m": 1210}
  ]
}

Ein zweites Beispiel: einen einzelnen Wanderstartpunkt prüfen

Nicht jeder Anwendungsfall erfordert die Verarbeitung eines ganzen Tracks. Bevor Sie eine Wanderbeschreibung veröffentlichen, bestätigt ein einzelner Aufruf die Höhe am Startpunkt selbst.

GET /v1/elevation?lat=45.8326&lon=6.8652

Das liefert dieselbe Ergebnisstruktur mit einem Eintrag und eignet sich, um eine in Wegbeschreibungen genannte Start- oder Zielhöhe stichprobenartig zu prüfen, ohne die vollständige GPX-Datei anfassen zu müssen.

Die Werte zurückschreiben

Die Ergebnisse kommen in derselben Reihenfolge zurück wie die gesendeten Koordinaten. Schreiben Sie elevation_m daher anhand der Position in das ele-Tag jedes Trackpunkts zurück und ersetzen Sie den ursprünglich aufgezeichneten Wert durch den abgefragten.

<trkpt lat="45.8326" lon="6.8652"><ele>1035</ele></trkpt>

Ein häufiger Fehler, den Sie vermeiden sollten

Mischen Sie innerhalb eines Auftrags nicht das Format mit dem Abfrageparameter points und einen Bulk-POST-Body, ohne konsequent festzulegen, wie Sie die Ergebnisse den Trackpunkten zuordnen. Der Parameter points und das JSON-Array liefern die Ergebnisse beide in der angegebenen Reihenfolge. Wer aber die Koordinaten für einen Punkt per Abfrageparameter und den Rest per Bulk-POST abruft und die beiden Antwortmengen dann nach Annahme statt durch ausdrücklichen Koordinatenabgleich zusammenführt, handelt sich leicht einen Versatz um eine Position in der zurückgeschriebenen Datei ein.

Entscheiden, wie viele Punkte angereichert werden

Eine GPX-Datei kann Tausende von Trackpunkten enthalten, die in kurzen Abständen aufgezeichnet wurden. Jeden einzelnen anzureichern bedeutet eine Anfrage pro Punkt, was sich bei einem langen aufgezeichneten Track summiert. Vor der Höhenabfrage auf ein gröberes Intervall herunterzurechnen und dann für die Punkte dazwischen zwischen den abgefragten Werten zu interpolieren, ist ein vernünftiger Weg, die Zahl der Anfragen zu senken und trotzdem ein genau wirkendes Profil zu erzeugen.

Ein Sonderfall: Punkte an der Küste und in Tieflagen

Ein Track, der an einer Küste entlang oder durch ein tief gelegenes Delta führt, kann völlig zu Recht einen Wert elevation_m bei oder nahe null liefern, gelegentlich auch eine kleine negative Zahl für Land unterhalb des Meeresspiegels. Keines von beiden ist ein Fehler. Behandeln Sie einen Wert nahe null als plausiblen echten Messwert für dieses Gelände, statt ihn als fehlerhaften Datenpunkt herauszufiltern.

Was es kostet

Jeder angereicherte Punkt ist eine Anfrage. Ein überschaubarer Wander-Track mit einigen hundert Punkten, heruntergerechnet aus einer viel größeren Rohaufzeichnung, bleibt deutlich innerhalb der 2.500 kostenlosen Anfragen pro Tag, die in jedem Schlüssel enthalten sind.

Höhendaten auf diese Weise zu bereinigen, macht aus einem wackeligen, per Smartphone aufgezeichneten Track etwas, das sich zu teilen oder zu analysieren lohnt. Die Dokumentation zur Höhenabfrage beschreibt sowohl den Parameter points als auch das Format für Bulk-Anfragen.