Расчет географического расстояния с использованием алгоритма, основанного на скалярном произведении декартовых координат

Я хотел бы рассчитать расстояние между двумя географическими точками (определяемыми парой широты и долготы), используя решение, описанное здесь.

Хотя я понимаю общую концепцию, часть с предварительное преобразование всех ваших сферических (широта / долгота) координат в трехмерные декартовы координаты единичной длины для меня проблематична.

Может ли кто-нибудь объяснить алгоритм, который мы должны написать для достижения вышеуказанного? Java была бы идеальной, но подойдет и псевдокод.

Обновление: меня не интересует метод Хаверсина.

Хотя это не совсем дубликат, я думаю, вам будет интересен этот вопрос и ответы на него: stackoverflow.com/questions/3694380/…

David Conrad 26.10.2018 23:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Начнем с преобразования в сферические координаты. Обратите внимание, что широта / долгота почти такие же, как углы в сферических координатах. Единственное отличие в том, что в отличие от phi широта начинается не от Северного полюса, а от экватора.

Итак, если у вас широта, равная +90 (90 ° N), соответствующий угол фи равен 0 °, а когда широта равна -90 (90 ° S), соответствующий угол phi равен 180 °.

phi   = -latitude + 90°
theta =  longitude
rho   = 1

Теперь вы можете перейти к декартову:

x=rho*sin(theta)*cos(phi); y = rho*sin(theta)*sin(phi); z = rho*cos(theta);

Но в вашем случае rho = 1, так что

x = sin(theta)*cos(phi);
y = sin(theta)*sin(phi);
z = cos(theta);

где phi и theta определены выше.

Другие вопросы по теме