Approximation des coordonnées GPS d'un point à partir de n emplacements attendus

9

J'essaie de trouver les coordonnées de mon point d'attention (point X, marqué en bleu). J'ai utilisé le GPS de ma voiture pour collecter les coordonnées selon l'endroit où j'ai garé mon véhicule à chaque fois que j'ai visité le point x. Donc, après avoir suivi cet exercice pendant 16 jours, j'ai réussi à obtenir 16 ensembles de coordonnées, réparties autour de mon point d'attention.

Après avoir tracé ces coordonnées sur la carte, j'ai observé ce qui suit: Deux fois ou trois fois sur dix, mon appareil GPS a donné un mauvais ensemble de coordonnées qui s'est avéré être calme loin du point X. Aussi à cause du trafic, parfois je suis incapable de se garer près du point x et donc dans ce cas aussi, les coordonnées obtenues sont loin du point X.

Problème: parmi les 16 ensembles de coordonnées obtenus, quel processus dois-je utiliser pour réduire à un ensemble de coordonnées qui est à proximité de mon point d'attention (point X)?

L'image prend en charge la description du problème ci-dessus

user3587184
la source
avez-vous des informations sur PDOP fournies par votre appareil GPS? cela pourrait vous aider à identifier les points non fiables.
radouxju
Je mettrais cela dans les réponses, mais je ne sais pas si c'est exactement ce que vous essayez de faire, mais jeter les valeurs aberrantes et utiliser un ajustement des moindres carrés, je crois, peut résoudre votre problème. utdallas.edu/~aiken/GPSCLASS/ch11.pdf
ed.hank

Réponses:

13

Une façon d'aborder ce problème intéressant est de le considérer comme un estimateur robuste du centre d'une distribution ponctuelle bivariée. Une solution (bien connue) consiste à décoller les coques convexes jusqu'à ce qu'il ne reste plus rien . Le centre de gravité de la dernière coque non vide localise le centre.

(Ceci est lié à la parcelle . Pour plus d'informations, recherchez sur le Web les «valeurs aberrantes multivariées de la coque convexe».)

Figure

Le résultat pour les 16 points illustrés est représenté par le triangle central sur cette carte. Les trois polygones environnants montrent les coques convexes successives. Les cinq points périphériques (30% du total!) Ont été supprimés au cours des deux premières étapes.


L'exemple a été calculé en R. L'algorithme lui-même est implémenté dans le bloc du milieu, le «pelage convexe». Il utilise la chullroutine intégrée , qui renvoie les index des points sur la coque. Ces points sont supprimés au moyen de l'expression d'indexation négative xy[-hull, ]. Cette opération est répétée jusqu'à ce que les derniers points soient supprimés. Dans la dernière étape, le centroïde est calculé en faisant la moyenne des coordonnées.

Notez que dans de nombreux cas, la projection des données n'est même pas nécessaire: les coques convexes ne changeront pas sauf si les caractéristiques d'origine s'étendent sur l'antiméridien (+/- 180 degrés de longitude), l'un ou l'autre des pôles, ou sont si étendues que la courbure des segments entre elles sera faites une différence. (Même alors, la courbure sera de peu d'importance, car le pelage convergera toujours vers un point central.)

#
# Project the data.
#
dy <- c(8,7,5,10,7,17,19,19,21,22,22,22,24,24,26,26)
dx <- c(66,67,66,89,89,79,78,76,75,81,78,77,75,80,77,83)
lat <- (28.702 + dy/1e5) / 180 * pi
lon <- (77.103 + dx/1e5) / 180 * pi
y <- dy
x <- cos(mean(lat)) * dx
#
# Convex peeling.
#
xy <- cbind(x, y)
while(TRUE) {
  hull <- chull(xy)
  if (length(hull) < nrow(xy)) {
    xy <- xy[-hull, ]
  } else {
    xy.0 <- matrix(apply(xy, 2, mean), 1, 2)
    break
  }
}
#
# Plot the data `xy` and the solution `xy.0`.
#
plot(range(x), range(y), type="n", asp=1)
points(x, y, pch=21, bg="#a01010")
points(xy.0, pch=24, cex=1.2, bg="#404080")
whuber
la source
Agréable. Une pensée: serait-il approprié de jeter toutes les mauvaises données probables avant de calculer les coques - uniquement en fonction de la façon dont elles ont été collectées (impossibilité de se garer à proximité) mais PAS en fonction de l'inspection des données?
Simbamangu
@Simba C'est une approche raisonnable.
whuber
Si nous avons plusieurs sites comme celui-ci, chacun avec un nombre différent d'observations (comme celui-ci en avait 16), dans un fichier Excel, comment pourrions-nous modifier le code pour cela.
user3587184
@ user3587184 Idéalement, vous ne feriez pas le travail dans Excel. Si vous le devez, écrivez une macro pour parcourir les groupes d'observations.
whuber