Trylateracja z wykorzystaniem 3 punktów szerokości i długości geograficznej oraz 3 odległości

Istnieje nieznana lokalizacja celu (współrzędne szerokości i długości geograficznej). Mam 3 pary współrzędnych szerokości i długości geograficznej i dla każdej pary odległość w kilometrach do miejsca docelowego. Jak obliczyć współrzędne docelowej lokalizacji?

Na przykład, powiedzmy, że mam następujące dane

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

Chciałbym wiedzieć, jak wyglądałyby wnętrzności funkcji, która przyjmuje to jako wejście i zwraca 37.417959,-121.961954 jako wyjście?

I understand how to Oblicz odległość między dwoma punktami, z http://www.movable-type.co.uk/scripts/latlong.html Rozumiem ogólną zasadę, że z trzema okręgami otrzymujesz dokładnie jeden punkt nakładania się. To, co mnie interesuje, to matematyka potrzebna do obliczenia tego punktu za pomocą tego wejścia.

Author: Kara, 2010-05-11

4 answers

Wikipedia daje dość dokładne omówienie algebry tutaj: http://en.wikipedia.org/wiki/Trilateration

Pierwszym krokiem, nie do końca omówionym we wpisie w Wikipedii, jest Konwersja współrzędnych lat / long na współrzędne kartezjańskie:

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 )

(aby uprościć obliczenia, pomieszałem rzeczy, więc pracujemy w jednostkach "promieni ziemi" zamiast kilometrów)

Za Twoje dane dostaję

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

Następny krok, który jest omówiony w Wikipedii artykuł ma uprościć współrzędne, tłumacząc punkty tak, aby p0 był na początku, a następnie obracał się tak, aby p1 był na osi X, a p2 na płaszczyźnie X-Y.

Dla tłumaczenia wystarczy odjąć p0 od p1 i 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
Rotacja nie jest dużo trudniejsza. p1b otrzymuje (x,y) = (d, 0), gdzie d jest tylko odległością od początku do P1A (twierdzenie Pitagorasa)

Dla p2b musimy rozdzielić p2a na dwa komponenty: jeden równoległy do p1a (który idzie na naszą oś x) i jeden prostopadły do p1a, (który biegnie na naszej osi Y w układzie współrzędnych "b").

Aby to zrobić, potrzebujemy wektora jednostkowego w kierunku p1a, który jest po prostu p1a * (1 / d). Weźmy punktowy iloczyn tego wektora jednostkowego (nazwijmy go p1a_hat, jeśli chcesz) z p2a, a to jest współrzędna X dla p2b. artykuł w Wikipedii nazywa tę wartość "I"

Teraz współrzędna Y jest łatwa. Długość od początku do p2 nie może się zmienić pod transformacją współrzędnych. Więc Oblicz długość p2a używając twierdzenia Pitagorasa, użyj twierdzenia Pitagorasa "Wstecz", aby uzyskać współrzędną Y dla p2b, aby zachować tę samą długość. To zmienna, którą Wikipedia nazywa "J". (Zauważ, że jest niejednoznaczność, którą zostawię, aby dowiedzieć się, czy J jest dodatnia, czy ujemna).

Teraz masz trzy zmienne d, I I J, które Artykuł Wikipedii używa do obliczeń. Możesz je teraz przeliczyć na kilometry, mnożąc przez ziemskie promień. Powinieneś być w stanie wykonać resztę obliczeń tutaj

(nawiasem mówiąc, Wikipedia podaje inne obliczenia transformacji współrzędnych. Lubię unikać Tryg tam, gdzie to możliwe).

 39
Author: Dan Menes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 07:07:34

Zadałem to pytanie na nowo powstałej giełdzie stosów GIS i tam też dostałem kilka dobrych odpowiedzi.

Https://gis.stackexchange.com/questions/66/trilateration-using-3-latitude-and-longitude-points-and-3-distances

Przyjęta tam odpowiedź ma (prawdopodobnie) działające rozwiązanie w Pythonie:

Https://gis.stackexchange.com/questions/66/trilateration-using-3-latitude-and-longitude-points-and-3-distances/415#415

 2
Author: nohat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:33:44
 1
Author: Martin Beckett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-25 20:40:22

Rozważmy następujące 9 okręgów Punkty A,B, C i odległości d1, d2, D3

  • środek a, promień d1
  • środek a, promień d2
  • środek a, promień d3
  • środek B, promień d1
  • środek B, promień d2
  • środek B, promień d3
  • środek C, promień d1
  • środek C, promień d2
  • środek C, promień d3

To są Twoje możliwe kręgi. Teraz możemy je usunąć, ponieważ wiemy, że jeśli d1 jest używany na A, to nie będzie używany na B.

To sprawia, że możliwe wpisy, gdzie A1 oznacza okrąg o środku A i promieniu D1:

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

Powinieneś być w stanie przeliczyć lat / long na X,Y, Z znając promień Ziemi i odległości od zakrzywionej odległości wzdłuż skorupy ziemskiej na odległość prostą, a stamtąd możesz zobaczyć, który z nich przecinają się w wspólnym punkcie. Pamiętaj, aby dopuszczać małe marginesy błędu z powodu niedoskonałości float.

 0
Author: corsiKa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-11 19:27:39