gpx gps-track validierung - fehlerhafte punkte erkennen/filtern

Hallo,

nach einer erfolglosen suche im internet+hier im forum, stell ich die frage nun selbst.
ich arbeite an einem kleinen hobby projekt in php (wird später kostenlos für öffentlichkeit nutzbar). dort bin ich gerade dabei die gpx-tracks von osm auszuwerten (einfach per url importieren und die XML mit SimpleXML auszuwerten), aus dem track nehme ich die punkte, ermittle daraus den max/min lat+long & zeit. daraus berechne ich noch die distanz und die max/min geschwindigkeit.
so, nun bin ich an einem punkt angelangt wo meine ergebnisse nicht mit anderen programmen mit übereinstimmen.

zum vergleich habe ich mir ein paar gps-tracks heruntergeladen und mit GPX-Editor verglichen, zusätzlich habe ich noch ein Plugin für mein Google-Chrome Browser installiert: “OSM Track analyzer”, diese plugin sendet einfach nur die id vom gpx-track auf der osm-seite zu einem anderen server, dort wird dann gerechnet und man erhält ein ergebnis als json-string.

mit meinem ersten beispiel gpx-track klappte es hervorragend, bis ich ein paar andere tracks zum vergleich benutzt habe. dort habe ich festgestellt dass es auch fehler in so einem track gibt, als beispiel: zeitstempel bleibt stehen die position springt aber (kein 5Hz logger). diese fehler machen meine geschwindigkeits-berechnung kaputt!
mit folgendem beispiel track bekomme ich falsche ergebnisse:
http://www.openstreetmap.org/user/GPSSpeedLte/traces/1121834

mit “OSM Track analyzer” wird folgende anfrage gesendet: http://traces.osmosnimki.ru/stat?ids=1121834 und man erhält diese antwort:

{"1121834": {"distance": 7.6942417469700004, "maxspeed": 136.606497744, "minspeed": 49.899901457200002, "uselesspoints": 0, "timestop": "2011-10-17T12:14:11", "usefulpoints": 244, "timestart": "2011-10-17T12:10:07", "timespan": 243.0, "bbox": "BOX3D(-94.128559 37.076861 0,-94.042535 37.078931 0)", "avgspeed": 111.54090928700001, "transport": {"foot": 0.0, "auto": 98.367346938799997, "train": 0.409836065573771, "bicycle": 0.0, "avia": 0.0}, "trkid": 1121834}}

als max-speed steht dort: 136,6km/h, mein script rechnet aber 261.18 aus! nach kurzem debuggen stellte ich fest das am anfang bei den ersten zwei punkten, die position sich änderte obwohl die zeit stehen blieb. meine frage, wie kann ich diese “anfangs-synchronisations-” bzw. fehler-punkte ermitteln/filtern?
ich hatte schon versucht alle punkte die gleiche uhrzeit haben zu filtern, die geschwindigkeit blieb allerdings bei. und ausserdem würde ich die genauigkeit von 5Hz empfängern beschneiden (5 punkte in einer sekunde).
hat da jemand erfahrung, wie man solche ungültigen/fehlerhaften punkte erkennt? evtl. ein toleranzband aus geschwindigkeit bzw. entfernung zwischen den punkten?

Gruß
b1

noch eine Anmerkung, das “OSM Track analyzer” hat auch ein feld: usefulpoints und uselesspoints! und bei diesem track: http://www.openstreetmap.org/user/dalo86/traces/1121649 werden auch 3 punkte als “useless” erkannt (http://traces.osmosnimki.ru/stat?ids=1121649!

{"1121649": {"distance": 7.76422547532, "maxspeed": 29.188048247499999, "minspeed": 3.8147159181400001, "uselesspoints": 3, "timestop": "2011-08-25T17:24:48", "usefulpoints": 361, "timestart": "2011-08-25T16:39:30", "timespan": 2663.0, "bbox": "BOX3D(-1.22352462922 41.767148582 0,-1.19048487993 41.7841778279 0)", "avgspeed": 10.7642720867, "transport": {"foot": 4.1436464088399996, "auto": 0.276243093923, "train": 0.0, "bicycle": 98.618784530400006, "avia": 0.0}, "trkid": 1121649}}

wie machen die das, wie erkennen die uselesspoints?!?!

ps: übrigens, falls jemand das plugin nicht kennt, so sieht das OSM Track analyzer aus:

Deine Frage kann ich zwar nicht beantworten, finde es aber schön dass Du dich damit beschäftigst. :wink:
Aus den Tracks kann man sehr viel rauslesen (so hab ich mir gestern bei der Korrektur der
TurnRestrictions die Tracks angeguckt), leider werden aus Datenschutzgünden oft die Zeitstempel nicht
mit hochgeladen oder sie werden gar verfälscht. Ob man das sauber erkennen und rausfiltern kann?
Chris

Hallo Chris, b166er

Selbst wenn die Zeitstempel enthalten sind, gibt es viele Gründe für ungenaue GPS-Daten:

  • GPS ist nicht wirklich genau, Abweichungen im Bereich 10 Meter (auch mehr) sind normal.
  • Die Empfangsbedingungen sind unterschiedlich.
    o Bei freier Sicht zum Himmel klappt alles recht gut (Genauigkeit besser als 10m)
    o Im Wald sieht das schon sehr viel schlechter aus.
    o Multipath-Empfang z.B. in Häuserschluchten kann ein GPS-Gerät ganz schön aus der Spur bringen.
  • Das Fahrverhalten ist nicht gleichmäßig.
    Beim Mappen (Fahrrad / zu Fuß) hält man öfter mal an.
    Manche Mapper löschen die dabei entstehenden Punkt-Wolken

PS:
Ich finde das auch bemerkenswert und gut, dass b166er sich mit dem Thema beschäftigt.
An der Stelle fehlen noch viele Analyse-Möglichkeiten.

Edbert (EvanE)

und ich finde es klasse dass

  1. ich so schnell feedback bekomme
  2. ihr es auch gut findet, dass ich mich damit beschäftige :slight_smile:

ich möchte an der stelle noch nicht verraten was es am ende sein wird (soll ne kleine Überraschung sein) :slight_smile: nichts besonderes, nur ein nettes kleines web-tool für osm-freaks, nicht wirklich nützlich aber evtl. wird es jemandem gefallen.

als baustein zum tool muss ich diese auswertung programmieren, die errechneten daten werden dann, wenn gewünscht (neben dem hauptprodukt) auch veröffentlicht, damit wäre es evtl. sogar auch etwas nützlich :slight_smile:

für das Projekt sind IST-Daten (aufgezeichnete strecke) entscheidend, nicht die Genauigkeit, diese Daten müssen aber so genau wie möglich ausgewerten sein.

welche analyse-möglichkeiten würden euch noch interessieren?

folgende Auswertungen aus den GPX-tracks habe ich bereits fertig:

  • Max & Min Latitude
  • Max & Min Longitude
  • Max & Min Zeitstempel
  • Max & Min Geschwindigkeit (hier muss ich noch den oben beschriebenen fehler lösen, damit es fehlerhafte punkte ignoriert)
  • gefahrene strecke (NICHT die luftlininie zwischen max-min der position)

Ich würde mir ein JOSM Plugin wünschen, mit dem ich durch die einzelnen Tracks eines Bereichs durchklicken kann
und dabei das Datum und Fahrzeug (Auto/Fahrrad/Fußgänger anhand des Geschwindigkeitsprofils) angezeigt wird.

Damit könnte man:
-Einbahnstraßen kontrollieren
-TurnRestriktions kontrollieren
etc.