Comment filtrer les mauvais points GPS?


11

J'ai une base de données de points GPS. Il n'y a pas de pistes, seulement des points. J'ai besoin de calculer une valeur tous les 100 mètres, mais parfois le GPS a donné des coordonnées erronées loin des vrais points GPS, et au lieu de calculer les valeurs pour un petit carré, je dois le calculer pour une très grande zone rectangulaire.

Quel est le meilleur algorithme pour filtrer les mauvais points GPS?

J'ai fait une capture d'écran pour comprendre:

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


1
J'utiliserais un petit multiple de la distance moyenne entre les points du cadre mobile (disons 10 derniers points) comme critère pour détecter de telles valeurs aberrantes.
lynxlynxlynx

Pouvez-vous décrire votre méthode plus en détail? J'ai une base de données de points, ils ne sont en aucun cas triés. La distance pourrait donc être de 2 mètres ou 500 mètres. Mais certains points sont très loin. J'ai fait une capture d'écran pour vous aider à comprendre
smirnoffs

2
Je vois. Dans ce cas, mon approche n'est pas si bonne. Je calculerais plutôt le point voisin le plus proche pour chaque point, puis je raserais les valeurs aberrantes là-bas.
lynxlynxlynx

2
La deuxième approche suggérée par @lynx fonctionnerait bien avec les données d'échantillonnage, en particulier lorsque la méthode de détection des valeurs aberrantes est bonne. Voir les questions sur les valeurs aberrantes sur notre site de statistiques pour les options. Par exemple, de nombreuses approches créatives (et valides) sont suggérées sur stats.stackexchange.com/questions/213 .
whuber

Réponses:


3

Exécutez le I d'Anselin Moran local contre les points et jetez n'importe quoi avec un score z inférieur à -1,96. C'est une méthode statistique pour localiser les valeurs aberrantes spatiales. Pour ce faire, vous devez vous assurer que tous les points ont une valeur liée à leur position spatiale.

Mais en vérifiant les outils dans 10.1 après le commentaire de whuber, je me rends compte que si vous utilisez ArcGIS 10.1, l'outil d'analyse de regroupement est disponible, ce qui est vraiment ce que vous voulez faire.

Je pense que vous voudriez faire une analyse de groupement avec une contrainte spatiale de Delaunay Triangulation. Le barrage routier ici est que vous devez avoir un nombre de groupes de partitionnement égal ou supérieur au nombre de groupes déconnectés (si l'une des valeurs aberrantes est des voisins naturels les uns des autres). Sinon, les valeurs aberrantes sans voisins naturels ne présenteront aucun groupe de l'analyse de regroupement.

Sur cette base, je pense que la triangulation de Delauney pourrait être la source d'un algorithme de filtrage, mais je ne suis pas encore sûr.

Une autre mise à jour: après avoir creusé dans Partition.py, le script qui exécute l'outil d'analyse de regroupement, je pense qu'il est possible d'utiliser l'algorithme là-dedans pour les groupes déconnectés combinés avec la partie NoNeighbors, bien que j'ai du mal à creuser cette partie de la scénario.


(-1) Cela garantira de jeter environ 1 point sur 40, quoi qu'il arrive. Il n'est pas conseillé d'utiliser un tel test pour la détection des valeurs aberrantes.
whuber

1
Ce n'est pas vrai lorsque des tests de valeurs aberrantes spatiales pures -si des valeurs aberrantes spatiales existent. Si les valeurs aberrantes spatiales n'existent pas, vous aurez alors ce problème, mais si elles existent, seules ces valeurs aberrantes devraient tomber dans un score z si bas. Tout dépend de la distribution spatiale des points.
blord-castillo

1
Presque: si les valeurs aberrantes elles-mêmes forment un cluster, vous risquez de ne pas les détecter complètement. (Considérez une situation où les coordonnées nulles ou manifestement mauvaises sont automatiquement mappées à (0,0).) Votre commentaire montre que la recherche de valeurs aberrantes peut être délicate et dépend de la nature des valeurs aberrantes: s'il peut y en avoir une ou plusieurs; à quelle distance ils peuvent être; s'ils peuvent se regrouper; etc. En règle générale, les statistiques qui font des hypothèses de distribution (comme cette utilisation du Local Moran I) ne fonctionnent pas aussi bien que les statistiques robustes et non paramétriques.
whuber

2
J'examinais un problème théorique spécifique, où vous avez les «bons» points GPS et vous avez un nombre égal de «mauvais» points GPS empilés les uns sur les autres dans un coin éloigné de la zone de délimitation. Sans connaissance du domaine d'intérêt pour les "bons" points, je ne pense pas que vous puissiez statistiquement séparer quel ensemble est "bon" et quel ensemble est "mauvais". Cela pourrait être un problème qui nécessite la désignation manuelle des zones d'intérêt.
blord-castillo

2
C'est exact: vous avez décrit une distribution multivariée bimodale. Ce qui est généralement fait dans de tels cas est soit l'estimation d'un modèle de mélange, soit l'application d'un algorithme de cluster. Le résultat est de séparer les composants du mélange / cluster mais sans désigner aucun d'entre eux comme des "valeurs aberrantes", ce devoir doit incomber à l'utilisateur.
whuber

3

Cela pourrait aider à obtenir une liste des valeurs aberrantes:

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

Ici, point_id serait la clé primaire de votre table de points. La fonction de distance trouvera les points où le plus proche est supérieur à 10000 mètres. (Vous pouvez, bien sûr, mettre toute valeur appropriée)

Si ce qui précède fonctionne, passez à une instruction DELETE, quelque chose comme:

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

1
1. Les points ne sont pas triés. 2. Que faire si l'erreur sera inférieure à 10000 mètres? Par exemple 150 mètres?
smirnoffs

1
Peut-être que je n'ai pas compris. D'après votre image, je vois que presque tous les points sont regroupés dans une seule zone, et un très petit nombre sont très éloignés. N'est-ce pas là le problème? Si un point n'est qu'à 150 mètres d'un autre, comment savez-vous qu'il s'agit d'une valeur aberrante?
Micha

1

Je vais essayer de fournir une réponse plus pratique pour vous aider à faire le travail. (excuses si vous cherchez une discussion sur les algorithmes)

Scénario 1: Vous mentionnez des «points GPS», donc si vous avez accès aux waypoints GPS d'origine, le travail devient beaucoup plus facile. Vous pouvez jeter des points avec un HDOP / VDOP élevé ou un nombre de satellites en vue - ce qui aurait causé l'erreur à l'origine. Un outil gratuit comme gpsbabel a de tels filtres intégrés. http://www.gpsbabel.org/htmldoc-development/Data_Filters.html

Scénario 2: Vous avez simplement un ensemble de points. Le problème devient alors la détection de valeurs aberrantes spatiales. Il y a beaucoup de recherches dans ce domaine et je vois beaucoup d'articles sur ce sujet à partir d'une recherche sur le Web. Si vous cherchez à nettoyer vos données, vous pouvez utiliser l'algorithme v.outlier de GRASS qui devrait fonctionner dans votre cas en fonction de la capture d'écran que vous avez partagée. http://grass.osgeo.org/gdp/html_grass63/v.outlier.html


Merci pour le commentaire. Malheureusement, je n'ai que des coordonnées. Le GPS n'était qu'une source de coordonnées et je n'ai pas accès aux traces GPS d'origine.
smirnoffs

-2

Je pense que vous avez des données indésirables. De façon réaliste, si vous vous souciez du fait que certaines données sont erronées et que vous ne pouvez pas identifier de manière fiable chaque mauvais point en utilisant un autre facteur, alors vous allez avoir de mauvaises données dans votre analyse.

Si cela importe, vous devriez probablement envisager de tout jeter, de déterminer la cause racine (par exemple, les mauvais points GPS proviennent de trajets multiples), de remédier à cette cause racine (par exemple, ajouter une antenne étrangleuse, ou un meilleur type de GPS, ou quelle que soit la meilleure solution. est), puis refaire la collecte de données.

Si les mauvaises données n'ont pas d'importance, utilisez-les et ignorez les erreurs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.