In meinen Tracks, insbesondere denen aus dem Google Standortverlauf (oder jetzt Zeitachse?), habe ich viele GPS- Positionen die offensichtlich fehlerhaft sind.
Das ist eigentlich nicht dramatisch, aber wenn ich z.B. am Chiemsee bin und eine schöne Tour nach Calw von vor ein paar Jahren noch mal fahren will stören diese Positionen doch enorm.
Im RC habe ich keine Möglichkeit gefunden solche Positionen, welche dann in einem Zeitraum von wenigen Sekunden kilometerweit von der vorigen entfernt und damit offensichtlich im Track unrealistisch sind, automatisch zu löschen.
Gibt es vielleicht doch eine Möglichkeit oder kennt jemand ein anderes Programm das das kann?
03.07.2020, 05:33 (This post was last modified: 03.07.2020, 05:39 by kumo.)
Moin...
Du denkst scheinbar an eine Umkehrung der Funktion Position -> Lösche doppelte Positionen...
Position -> Lösche doppelte Positionen... erlaubt es, automatisiert eine Häufung von Trackpunkten zu finden, die nahe beieinander liegen (zum Beispiel im Stillstand aufgezeichnete Punkte) oder die für die Darstellung der allgemeinen Kontur des Tracks nicht relevant sind (Douglas-Peucker-Algorithmus in der aktuellen Anwendung).
Eine Quasi-Umkehrung sollte dann, basierend auf den vorherigen und nachfolgenden Trackpunkten, nach gravierenden Ausreißern suchen. Der Wert für 'gravierend' sollte möglichst noch einstellbar sein. Im Prinzip könnte auch der Douglas-Peucker-Algorithmus eine andere Verwendung finden: Im Gegensatz zur bisherigen Anwendung sollte nach Einzelpunkten gesucht werden, die sich weit ausserhalb der Kontur des Tracks befinden und deren Harmonie stören.
ein möglicher Ansatz wäre evtl. etwas über die Geschwindigkeit zwischen den Punkten zu machen. Zumindest mache ich das immer so, wenn ich das manuell suche. Die Ausreißer haben meist irgendwelche utopischen Geschwindigkeiten bzw. Beschleunigungen, die danach wieder normal sind.
Ich weiss z.B., dass mein Auto keine 987km/h schafft oder innerhalb von 50m von 30 km/h auf 200km/h beschleunigt und dann wieder zurück bremst.
Evtl. könnte man solche Grenzen einstellbar machen und dann durch den RC die Überschreitungen finden lassen.
Das Minilog auf dem TomTom hatte die Ausreißer fast nicht, aber das funktioniert seit dem Update nach dem Weeknumber Rollover nicht mehr und vom Google Standortverlauf kriege ich die Rohdaten nur in Paketen zu 2 Monaten, und die sehen dann übel aus:
03.07.2020, 10:07 (This post was last modified: 03.07.2020, 10:14 by nordlicht.)
Mit dem Thema "zuverlässige Ausreißererkennung" beschäftigen sich Scharen von Mathematikern, eine Einführung ist hier zu lesen.
(03.07.2020, 05:33)kumo Wrote: Im Prinzip könnte auch der Douglas-Peucker-Algorithmus eine andere Verwendung finden: Im Gegensatz zur bisherigen Anwendung sollte nach Einzelpunkten gesucht werden, die sich weit ausserhalb der Kontur des Tracks befinden und deren Harmonie stören.
Der Douglas-Peucker-Algorithmus gibt das nicht her. Einfachere Lösungen: GPS-Track-Analyse hatte eine manuelle Fehlererkennung über die Suche nach Extremwerten, Trackguru hat eine geschwindigkeitsbasierte Fehlererkennung. Bei letzterem werden die Einstellungen über Profile parametriert, out of the box gibt es Pferd/Wanderer/Trekkingrad, für motorisierte Fortbewegung muß man per Editor ein neues Profil anlegen. Für RC könnte ich mir unter "doppelte Positionen löschen" einen weiteren Menüpunkt "alle Punkte mit einer Geschwindigkeit über xxx km/h markieren" vorstellen.
(03.07.2020, 10:07)nordlicht Wrote: Einfachere Lösungen: GPS-Track-Analyse hatte eine manuelle Fehlererkennung über die Suche nach Extremwerten, Trackguru hat eine geschwindigkeitsbasierte Fehlererkennung. Bei letzterem werden die Einstellungen über Profile parametriert, out of the box gibt es Pferd/Wanderer/Trekkingrad, für motorisierte Fortbewegung muß man per Editor ein neues Profil anlegen.
(03.07.2020, 08:38)lundefugl Wrote: Ich weiss z.B., dass mein Auto keine 987km/h schafft oder innerhalb von 50m von 30 km/h auf 200km/h beschleunigt und dann wieder zurück bremst.
Evtl. könnte man solche Grenzen einstellbar machen und dann durch den RC die Überschreitungen finden lassen.
Hallo Thomas,
also etwas analog zu PositionsModel#getPositionsWithinDistanceToPredecessor, das dann aus dem "Lösche Positionen" Dialog aufgerufen wird?
Das ist dann analog zu
Code:
public int[] getPositionsWithinDistanceToPredecessor(double distance) {
List<P> positions = getPositions();
if (positions.size() <= 2)
return new int[0];
P previous = positions.get(0);
List<Integer> result = new ArrayList<>();
for (int i = 1; i < positions.size() - 1; i++) {
P next = positions.get(i);
if (!next.hasCoordinates() || toDouble(next.calculateDistance(previous)) <= distance)
result.add(i);
else
previous = next;
}
return toArray(result);
}
bloß, dass die Bedingung
Code:
next.calculateDistance(previous) <= distance
etwas komplizierter ist.
Klingt jetzt nicht so schwierig, wenn
man Dateien zum Testen hat
vernünftige Kriterien, die sich idealerweise auf die aktuelle und die vorherige Position beziehen
Hier zum Testen ein stark bereinigter Track von 2010:
Korsika2010.zip (Size: 13.38 KB / Downloads: 398)
Der Track hat deutliche Ausreisser oben rechts bei Cap Corse und in der Mitte etwas nordöstlich von Corte.