Ich muss einen Algorithmus oder eine Methode finden, die Ausreißerpunkte latitude
longitude
in einer Trajektorie während der Nachbearbeitung erkennen kann , die dann behoben werden können (basierend auf ihren Nachbarn wieder in den Pfad der Trajektorie gebracht).
Als Beispiel für die Art von Ausreißerpunkten, die ich erkennen und beheben möchte, habe ich ein Bild angehängt, das Folgendes demonstriert:
Ich habe versucht, einen nicht parfümierten Kalman-Filter zu verwenden, um die Daten so gut wie möglich zu glätten, aber dies scheint für extremere Ausreißer nicht effektiv genug zu funktionieren (Rohdaten in Blau, geglättete Daten in Rot):
Mein UKF ist möglicherweise nicht richtig kalibriert (aber ich bin mir ziemlich sicher, dass dies der Fall ist).
Die Flugbahnen sind die von Wanderern, Läufern und Radfahrern - von Menschen angetriebene Bewegungen, die starten und stoppen können, aber ihre Geschwindigkeit oder Position nicht so schnell oder plötzlich drastisch ändern.
Eine Lösung, die nicht auf Zeitdaten (und nur auf Positionsdaten) beruht, wäre äußerst nützlich (da die verarbeiteten Daten möglicherweise nicht immer Zeitdaten enthalten). Ich bin mir jedoch bewusst, wie unwahrscheinlich es ist, dass es eine solche Lösung gibt, und bin daher genauso froh, eine Lösung zu haben!
Im Idealfall erkennt die Lösung den Ausreißer, sodass er behoben werden kann, was zu einer korrigierten Flugbahn führt:
Ressourcen, die ich durchgesehen habe:
Smooth GPS data
- /programming/1134579/smooth-gps-dataCommon GPS and Geospatial Tracking Challenges and Solutions
- http://www.toptal.com/gis/adventures-in-gps-track-analytics-a-geospatial-primer (Lösung scheint die Genauigkeit der Daten zu verlieren)Welchen Algorithmus sollte ich verwenden, um Ausreißer in Trace-Daten zu entfernen?
Algorithmus, den ich benutze.
Wie man sehen kann, könnte es in einer scharfen Kurve eine Ecke schneiden.
Ich habe ArcGIS Python Implementierung des obigen Algorithmus, es verwendet Networkx-Modul. Lassen Sie mich wissen, ob dies von Interesse ist, und ich werde meine Antwort mit dem Skript aktualisieren
AKTUALISIEREN:
quelle
Eine Idee ist, ein Skript zu erstellen, das die Winkel (und möglicherweise auch die Länge) jedes Abschnitts Ihres Pfades auflistet. Jetzt können Sie die Werte jedes Segments mit seinen direkten Nachbarn vergleichen (und möglicherweise auch mit den zweiten Nachbarn, um die Genauigkeit zu erhöhen) und alle Punkte auswählen, an denen die Werte einen bestimmten Wert überschreiten. Zum Schluss löschen Sie einfach die Punkte aus Ihrem Pfad.
quelle
Sehenswert ist auch die Median-5-Methode.
Jede x- (oder y-) Koordinate wird nacheinander auf den Median der 5 x- (oder y-) Werte um sie herum gesetzt (dh selbst, die beiden vorherigen Werte und die beiden nachfolgenden Werte).
zB x3 = Median (x1, x2, x3, x4, x5) y3 = Median (y1, y2, y3, y4, y5) usw.
Die Methode ist schnell und auch beim Streaming von Daten einfach anzuwenden.
quelle
Diese Frage / Antwort enthält einige gute Daten.
Es hängt jedoch alles davon ab, wie Ihre Punkte auf das gruppiert werden, was funktionieren wird / nicht. Sie müssen vorsichtig sein, wenn Punkte verteilt sind, aber keine Ausreißer.
quelle
Sie können Ihre Daten in Excel importieren oder Pandas und Flag verwenden und / oder alle Entfernungen vom vorherigen Punkt löschen, die einen unrealistischen Entfernungsschwellenwert überschreiten.
quelle