Znaleźć odległość między dwiema współrzędnymi w elipsoidzie?

18

Mam dwa zestawy szerokości i długości geograficznej.

Jak znaleźć odległość między dwiema lokalizacjami, jeśli założę, że Ziemia jest idealną elipsoidą (o mimośrodowości 0,0167)?

Jon Bringhurst
źródło

Odpowiedzi:

16

Polecam sprawdzić:
Kulisty: http://www.movable-type.co.uk/scripts/latlong.html
Great-Circle: http://www.movable-type.co.uk/scripts/gis-faq -5.1.html

Wallbasher
źródło
1
Formuły na tej stronie wydają się ignorować ekscentryczność. Zakładają, że Ziemia jest kulą, a nie elipsoidą.
Jon Bringhurst
Wcześniej zawsze korzystałem z biblioteki, która znała odległości między niektórymi ustawionymi długimi punktami, a następnie przeprowadzałem uśrednianie, aby obliczyć odległość jakichkolwiek nieznanych punktów. Zapytam o to kilka osób.
Wallbasher
Ach, drugi link wydaje się mieć właściwą formułę. Dzięki!
Jon Bringhurst
1
Dzięki za odpowiedź @Wallbasher. Byłoby jednak najlepiej, gdyby odpowiedzi były samodzielne. Byłoby to bardzo pomocne, gdybyś opublikował odpowiednią formułę wraz z odpowiedzią.
RK
7

Powiedzmy więc, że znasz swoje dwie szerokości i długości geograficzne

Możesz obliczyć współrzędne kartezjańskie dla każdego:

xa = (Cos(thisLat)) * (Cos(thisLong));
ya = (Cos(thisLat)) * (Sin(thisLong));
za = (Sin(thisLat));

xb = (Cos(otherLat)) * (Cos(otherLong));
yb = (Cos(otherLat)) * (Sin(otherLong));
zb = (Sin(otherLat));

A następnie obliczyć wielką odległość między nimi za pomocą:

MeanRadius * Acos(xa * xb + ya * yb + za * zb);

To uproszczone podejście pozwala na wstępne obliczenie wartości x, y i z, które mogą być przechowywane obok siebie w bazie danych w celu uzyskania wydajnych zapytań „punktów w obrębie x mil”.

Oczywiście zakłada to idealną kulę, a Ziemia nie jest nawet idealną elipsoidą, więc dokładność będzie wynosić tylko kilka metrów.

Rowland Shaw
źródło
1
Chciałem również zwrócić uwagę na „idealną kulę”. Powinieneś być świadomy, że ta metoda da ci różne stopnie dokładności w zależności od tego, gdzie jesteś na świecie.
TroutSlayer
@TrotuSlayer jest ogólnie wystarczająco dobry dla większości aplikacji i zawsze występuje kompromis między szybkością a dokładnością. Jeśli chcesz być bardziej dokładny, nadszedł czas, aby wyciągnąć koło nadążne lub skorzystać z założeń, że Ziemia jest płaska dla danego obszaru, a odległości 2D są wystarczające.
Rowland Shaw,