Trilatération utilisant 3 points de latitude et de longitude, et 3 distances

il existe une cible inconnue (coordonnées de latitude et de longitude). J'ai 3 paires de coordonnées de latitude et de longitude et pour chaque paire une distance en kilomètres de l'emplacement de la cible. Comment puis-je calculer les coordonnées de l'emplacement cible?

par exemple, dire que j'ai les points de données suivants

37.418436,-121.963477   0.265710701754km
37.417243,-121.961889   0.234592423446km
37.418692,-121.960194   0.0548954278262km

ce que j'aimerais c'est ce que les tripes de la fonction qui prend cela comme entrée et retourne 37.417959,-121.961954 comme sortie ressembler?

je comprends comment calculer la distance entre deux points, de http://www.movable-type.co.uk/scripts/latlong.html je comprends le principe général qu'avec trois cercles vous obtenez exactement un point de chevauchement. Ce que je suis flou, c'est les maths nécessaires pour calculer ce point avec cette entrée.

23
demandé sur Kara 2010-05-11 22:58:27

4 réponses

Wikipedia donne une discussion assez approfondie de l'algèbre ici: http://en.wikipedia.org/wiki/Trilateration

la première étape, pas vraiment couverte dans L'entrée Wikipédia, est de convertir vos coordonnées lat / long en coordonnées cartésiennes:

x0 = cos( lon0 ) * cos( lat0 ) , y0 = sin( lon0 ) * cos( lat0 ) , z0 = sin( lat0 )
x1 = cos( lon1 ) * cos( lat0 ) , y1 = sin( lon1 ) * cos( lat1 ) , z1 = sin( lat1 )
x2 = cos( lon2 ) * cos( lat0 ) , y2 = sin( lon2 ) * cos( lat2 ) , z2 = sin( lat2 )

(pour garder les calculs simples, j'ai trafiqué les choses donc nous travaillons en unités de" rayons de terre "au lieu de kilomètres)

pour votre data, je reçois

         p0            p1           p2
X   -0.420442596  -0.420430618  -0.42040255
Y   -0.67380418   -0.673826567  -0.673825967
Z    0.607631426   0.607614889   0.607634975

l'étape suivante, qui est couverte dans L'article de Wikipedia, est de simplifier les coordonnées, en traduisant les points de sorte que p0 soit à l'origine, puis en tournant de sorte que p1 soit sur l'axe X, et p2 soit dans le plan X-Y.

pour la traduction, il suffit de soustraire p0 de p1 et p2:

    p0a      p1a          p2a
X   0    1.19779E-05   4.00462E-05
Y   0   -2.23864E-05  -2.17865E-05
Z   0   -1.65372E-05   3.5486E-06

la rotation n'est pas beaucoup plus difficile. p1b obtient (x,y) = (d,0), où d est juste la distance de l'origine à p1a (théorème de Pythagore)

pour p2b, nous devons résoudre p2a en deux composantes: une parallèle à p1a (qui va sur notre axe x), et une perpendiculaire à p1a (qui va sur notre axe y dans le système de coordonnées "b").

Pour ce faire, nous avons besoin d'un vecteur unitaire dans la direction de p1a, qui est juste p1a * ( 1/d ). Prenez le produit dot de ce vecteur unité (appelez-le p1a_hat, si vous voulez) avec p2a, et c'est la coordonnée X pour p2b. L'article de Wikipedia appelle cette valeur "I"

maintenant la coordonnée Y est facile. La longueur de l'origine à p2 ne peut pas changer sous la transformation de coordonnées. Ainsi, calculer la longueur de p2a en utilisant le théorème de Pythagore, puis utiliser le théorème de Pythagore "à l'envers" pour obtenir ce que la coordonnée de Y pour p2b doit être pour garder la longueur la même. C'est la variable que Wikipedia appelle "J". (Notez qu'il y a une ambiguïté que je vous laisse pour savoir si J est positif ou négatif).

Maintenant vous avez les trois variables d, I et J, que L'article de Wikipedia utilise pour le calcul. Vous pouvez les convertir en kilomètres maintenant, en les multipliant par le rayon de la terre. Vous devriez être en mesure de faire le reste du calcul à partir d'ici

(soit dit en passant, Wikipedia donne un calcul différent pour la transformation de coordonnées. Je tiens à éviter de trig si possible).

39
répondu Dan Menes 2014-04-15 07:07:34

considérez les 9 cercles suivants Points A,B, C et distances d1, d2 ,d3 151910920"

  • Centre de A, rayon d1
  • Centre de A, rayon D2
  • Centre de A, rayon d3
  • Centre de B, rayon d1
  • Centre de B, rayon D2
  • Centre de B, rayon d3
  • Centre de C, rayon d1
  • Centre de C, rayon d2
  • Centre de C, rayon d3

ce sont vos cercles possibles. Nous pouvons maintenant les éliminer, parce que nous savons que si d1 est utilisé sur A, il ne sera pas utilisé sur B.

cela rend vos entrées possibles, où A1 signifie cercle avec le centre A et le rayon D1:

  • {A1, B2, C3}
  • {A1, B3, C2}
  • {A2, B1, C3}
  • {A2, B3, C1}
  • {A3, B1, C2}
  • {A3, B2, C1}

vous devriez être en mesure de convertir le lat/long à X,Y,Z connaissant le rayon de la terre, et les distances de la distance courbée le long de la croûte terrestre à la distance droite, et de là vous pouvez voir qui d'entre eux se croisent à un point commun. N'oubliez pas de tenir compte des petites marges d'erreur dues à l'imperfection du flotteur.

0
répondu corsiKa 2010-05-11 19:27:39