Ich habe eine Datenbank mit GPS-Punkten. Es gibt keine Spuren, nur Punkte. Ich muss einen Wert für jeweils 100 Meter berechnen, aber manchmal hat GPS falsche Koordinaten angegeben, die weit von echten GPS-Punkten entfernt sind, und anstatt Werte für ein kleines Quadrat zu berechnen, muss ich sie für eine wirklich große rechteckige Fläche berechnen.
Was ist der beste Algorithmus, um falsche GPS-Punkte zu filtern?
Ich habe einen Screenshot gemacht, um zu verstehen:
Antworten:
Führen Sie Anselin Local Morans I gegen die Punkte und werfen Sie alles mit einem Z-Score unter -1,96 weg. Dies ist eine statistische Methode zum Auffinden räumlicher Ausreißer. Sie müssen sicherstellen, dass alle Punkte einen Wert haben, der sich auf ihre räumliche Position bezieht, um dies zu tun.
Bei der Überprüfung der Tools in 10.1 nach dem Kommentar von whuber wird mir jedoch klar, dass bei Verwendung von ArcGIS 10.1 das Tool zur Gruppierungsanalyse verfügbar ist, was genau das ist, was Sie tun möchten.
Ich denke, Sie möchten eine Gruppierungsanalyse mit einer räumlichen Einschränkung der Delaunay-Triangulation durchführen. Das Hindernis hierbei ist, dass Sie eine Anzahl von Partitionierungsgruppen benötigen, die gleich oder größer als die Anzahl der nicht verbundenen Gruppen ist (wenn einer der Ausreißer natürliche Nachbarn zueinander sind). Andernfalls erhalten Ausreißer ohne natürliche Nachbarn keine Gruppe aus der Gruppierungsanalyse.
Aufgrund dessen denke ich, dass die Delauney-Triangulation die Quelle eines Filteralgorithmus sein könnte, aber ich bin mir noch nicht sicher.
Ein weiteres Update: Nach dem Eingraben in Partition.py, dem Skript, mit dem das Gruppierungsanalyse-Tool ausgeführt wird, ist es meines Erachtens möglich, den dort enthaltenen Algorithmus für nicht verbundene Gruppen in Kombination mit dem NoNeighbors-Teil zu verwenden, obwohl ich Probleme habe, diesen Teil des Skript.
quelle
Dies könnte helfen, eine Liste der Ausreißer zu erhalten:
Hier wäre point_id der Primärschlüssel in Ihrer Punktetabelle. Die Entfernungsfunktion findet Punkte, bei denen der nächste größer als 10000 Meter ist. (Sie können natürlich jeden angemessenen Wert angeben)
Wenn das oben genannte funktioniert, wechseln Sie zu einer DELETE-Anweisung, etwa wie folgt:
quelle
Ich werde versuchen, eine praktischere Antwort zu geben, damit Sie Ihre Arbeit erledigen können. (Entschuldigung, wenn Sie nach einer Diskussion über Algorithmen suchen)
Szenario 1: Sie erwähnen "GPS-Punkte". Wenn Sie also Zugriff auf die ursprünglichen GPS-Wegpunkte haben, wird die Arbeit viel einfacher. Sie können Punkte mit hohem HDOP / VDOP oder der Anzahl der sichtbaren Satelliten wegwerfen - was den Fehler ursprünglich verursacht hätte. In einem kostenlosen Tool wie gpsbabel sind solche Filter integriert. http://www.gpsbabel.org/htmldoc-development/Data_Filters.html
Szenario 2: Sie haben einfach eine Reihe von Punkten. Das Problem besteht dann darin, räumliche Ausreißer zu erkennen. Es gibt viel Forschung in diesem Bereich und ich sehe viele Artikel zu diesem Thema aus einer Websuche. Wenn Sie Ihre Daten bereinigen möchten, können Sie den v.outlier-Algorithmus von GRASS verwenden, der in Ihrem Fall basierend auf dem von Ihnen freigegebenen Screenshot funktionieren sollte. http://grass.osgeo.org/gdp/html_grass63/v.outlier.html
quelle
Ich denke, Sie haben Junk-Daten. Wenn Sie sich realistisch darum kümmern, dass einige der Daten falsch sind und Sie nicht jeden falschen Punkt anhand eines anderen Faktors zuverlässig identifizieren können, werden Ihre Analyse einige schlechte Daten enthalten.
Wenn dies wichtig ist, sollten Sie wahrscheinlich in Betracht ziehen, alles wegzuwerfen, die Grundursache herauszufinden (z. B. die schlechten GPS-Punkte stammen aus Mehrwegeausfällen), diese Grundursache zu beheben (z. B. Hinzufügen einer Choke-Antenne oder eines besseren GPS-Typs oder was auch immer die beste Lösung ist is) und anschließend die Datenerfassung wiederholen.
Wenn die fehlerhaften Daten keine Rolle spielen, verwenden Sie sie einfach und ignorieren Sie die Fehler.
quelle