Come filtrare punti GPS errati?


11

Ho un database di punti GPS. Non ci sono tracce, solo punti. Devo calcolare un valore per ogni 100 metri, ma a volte il GPS ha fornito coordinate errate che si trovano lontano dai punti GPS reali e, invece di calcolare i valori per un quadratino, devo calcolarlo per un'area rettangolare molto grande.

Qual è l'algoritmo migliore per filtrare punti GPS errati?

Ho fatto uno screenshot per aiutare a capire:

! [Http://content.screencast.com/users/smirnoffs/folders/Jing/media/94624331-db6a-4171-bed9-e2183f953a1d/gps_error.png]


1
Userei un piccolo multiplo del telaio mobile (diciamo 10 ultimi punti) distanza media tra i punti come criterio per rilevare tali valori anomali.
lynxlynxlynx,

Puoi descrivere il tuo metodo in modo più dettagliato? Ho un database di punti, non sono ordinati in alcun tipo. Quindi la distanza potrebbe essere di 2 metri o 500 metri. Ma alcuni punti sono molto lontani. Ho fatto uno screenshot per aiutarti a capire
smirnoffs

2
Vedo. In questo caso il mio approccio non è così buono. Vorrei invece calcolare il punto vicino più vicino per ciascun punto e quindi radere i valori anomali lì.
lynxlynxlynx,

2
Il secondo approccio suggerito da @lynx funzionerebbe bene con i dati di esempio, specialmente quando il metodo di rilevamento anomalo è valido. Vedi le domande sugli outlier sul nostro sito di statistiche per le opzioni Ad esempio, molti approcci creativi (e validi) sono suggeriti su stats.stackexchange.com/questions/213 .
whuber

Risposte:


3

Esegui Anselin Local Moran's I contro i punti e butta via qualsiasi cosa con un punteggio z inferiore a -1,96. Questo è un metodo statistico per localizzare valori anomali spaziali. È necessario assicurarsi che tutti i punti abbiano un valore correlato alla loro posizione spaziale per farlo.

Ma controllando gli strumenti in 10.1 dopo il commento di Whuber, mi rendo conto che se usi ArcGIS 10.1, lo strumento di analisi di raggruppamento è disponibile, il che è davvero ciò che vuoi fare.

Penso che vorresti fare un'analisi di raggruppamento con un vincolo spaziale di triangolazione di Delaunay. Il blocco qui è che devi avere un numero di gruppi di partizionamento uguale o maggiore del numero di gruppi disconnessi (se uno qualsiasi dei valori anomali è un vicino naturale tra loro). Altrimenti, i valori anomali senza vicini naturali verranno fuori dall'analisi di raggruppamento.

Sulla base di ciò, penso che la triangolazione di Delauney potrebbe essere la fonte di un algoritmo di filtro, ma non ne sono ancora sicuro.

Un altro aggiornamento: dopo aver scavato in Partition.py, lo script che esegue lo strumento di analisi di raggruppamento, penso che sia possibile utilizzare l'algoritmo lì dentro per i gruppi disconnessi combinati con la parte NoNeighbors, anche se ho problemi a scavare quella parte del script.


(-1) Questo è garantito per buttare via circa 1 su 40 punti, non importa quale. Non è consigliabile utilizzare tali test per il rilevamento anomalo.
whuber

1
Ciò non è vero quando esistono test per valori anomali spaziali puri - se esistono valori anomali spaziali. Se gli outlier spaziali non esistono, allora si avrà quel problema, ma se esistono allora solo quegli outlier dovrebbero cadere in un punteggio z così basso. Tutto dipende dalla distribuzione spaziale dei punti.
blord-castillo,

1
Quasi: se gli stessi valori anomali formano un cluster, potresti non riuscire a rilevarli del tutto. (Considera una situazione in cui le coordinate nulle o ovviamente cattive vengono mappate automaticamente su (0,0). Il tuo commento mostra che trovare valori anomali può essere complicato e dipende dalla natura dei valori anomali: se ce ne possono essere uno o più; quanto lontano possono essere; se possono raggrupparsi; ecc. Come principio generale, le statistiche che fanno ipotesi distributive (come questo uso dell'Io di Moran locale) non funzionano così come le statistiche robuste e non parametriche.
whuber

2
Stavo prendendo in considerazione un problema teorico specifico, in cui hai i punti GPS "buoni" e hai un numero uguale di punti GPS "cattivi" impilati uno sopra l'altro in un angolo lontano del riquadro di delimitazione. Senza la conoscenza dell'area di interesse per i punti "buoni", non penso che tu possa separare statisticamente quale set è "buono" e quale set è "cattivo". Questo potrebbe essere un problema che richiede la designazione manuale delle aree di interesse.
blord-castillo,

2
È corretto: hai descritto una distribuzione multivariata bimodale. Ciò che di solito viene fatto in questi casi è la stima di un modello di miscela o l'applicazione di un algoritmo a grappolo. Il risultato è quello di separare i componenti della miscela / cluster, ma senza designare nessuno di essi come "valori anomali:" tale compito deve spettare all'utente.
whuber

3

Questo potrebbe aiutare a ottenere un elenco dei valori anomali:

SELECT p1.point_id 
FROM p1 AS points, p2 AS points
WHERE p1.point_id <> p2.point_id AND
ST_Distance(p1.geom, p2.geom) > 10000

Qui, point_id sarebbe la chiave primaria nella tabella dei punti. La funzione di distanza troverà punti in cui il più vicino è maggiore di 10000 metri. (Puoi, ovviamente, mettere qualsiasi valore appropriato)

Se quanto sopra funziona, quindi passare a una dichiarazione DELETE, qualcosa del tipo:

DELETE FROM points WHERE point_id IN (
-- SELECT as above
SELECT ....
);

1
1. I punti non sono ordinati. 2. Cosa succede se l'errore sarà inferiore a 10000 metri? Ad esempio 150 metri?
smirnoffs

1
Forse non ho capito. Dalla tua immagine, vedo che quasi tutti i punti sono raggruppati in un'unica area e un numero molto piccolo è molto lontano. Non è questo il problema? Se un punto è a soli 150 metri da un altro, come fai a sapere che è un valore anomalo?
Micha,

1

Proverò a fornire una risposta più pratica per aiutarti a svolgere il lavoro. (mi scuso se stai cercando una discussione sugli algoritmi)

Scenario 1: menzioni i "punti GPS", quindi se hai accesso ai waypoint GPS originali, il lavoro diventa molto più semplice. È possibile eliminare i punti con HDOP / VDOP elevato o il numero di satelliti in vista, il che avrebbe originariamente causato l'errore. Uno strumento gratuito come gpsbabel ha tali filtri integrati. http://www.gpsbabel.org/htmldoc-development/Data_Filters.html

Scenario 2: hai semplicemente una serie di punti. Il problema diventa quindi il rilevamento di valori anomali spaziali. C'è molta ricerca in questo settore e vedo molti articoli su questo argomento da una ricerca sul web. Se stai cercando di ripulire i tuoi dati, puoi usare l'algoritmo v.outlier di GRASS che dovrebbe funzionare nel tuo caso in base allo screenshot che hai condiviso. http://grass.osgeo.org/gdp/html_grass63/v.outlier.html


Grazie per il commento Purtroppo ho solo coordinate. Il GPS era solo una fonte di coordinate e non ho accesso alle tracce GPS originali.
smirnoffs

-2

Penso che tu abbia dati spazzatura. Realisticamente, se ti preoccupi del fatto che alcuni dei dati siano errati e non riesci a identificare in modo affidabile ogni punto sbagliato utilizzando un altro fattore, allora avrai alcuni dati errati nell'analisi.

Se è importante, allora dovresti probabilmente considerare di lanciare tutto, capire la causa principale (ad esempio i punti GPS cattivi provengono da multipath), affrontare quella causa principale (ad esempio aggiungendo un'antenna strozzata, o un tipo migliore di GPS, o qualunque sia la soluzione migliore è), quindi ripetere la raccolta dei dati.

Se i dati errati non contano, utilizzali e ignora gli errori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.