Я хотел бы рассчитать расстояние между двумя географическими точками (определяемыми парой широты и долготы), используя решение, описанное здесь.
Хотя я понимаю общую концепцию, часть с предварительное преобразование всех ваших сферических (широта / долгота) координат в трехмерные декартовы координаты единичной длины для меня проблематична.
Может ли кто-нибудь объяснить алгоритм, который мы должны написать для достижения вышеуказанного? Java была бы идеальной, но подойдет и псевдокод.
Обновление: меня не интересует метод Хаверсина.
Начнем с преобразования в сферические координаты. Обратите внимание, что широта / долгота почти такие же, как углы в сферических координатах. Единственное отличие в том, что в отличие от phi
широта начинается не от Северного полюса, а от экватора.
Итак, если у вас широта, равная +90 (90 ° N), соответствующий угол фи равен 0 °, а когда широта равна -90 (90 ° S), соответствующий угол phi
равен 180 °.
phi = -latitude + 90°
theta = longitude
rho = 1
Теперь вы можете перейти к декартову:
Но в вашем случае rho = 1
, так что
x = sin(theta)*cos(phi);
y = sin(theta)*sin(phi);
z = cos(theta);
где phi
и theta
определены выше.
Хотя это не совсем дубликат, я думаю, вам будет интересен этот вопрос и ответы на него: stackoverflow.com/questions/3694380/…