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:
Réponses:
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.
la source
Cela pourrait aider à obtenir une liste des valeurs aberrantes:
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:
la source
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
la source
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.
la source