Правильный способ вычисления угла между геопоинтами - PullRequest
0 голосов
/ 11 октября 2018

У меня проблема с углом вычисления между линиями, созданными путем соединения трех гео-точек.

p1
    \    p2
     \  /
     p3

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

angle = atan2(vector2.y, vector2.x) - atan2(vector1.y, vector1.x).

Каждый метод возвращал один и тот же неверный результат.

Например, у меня есть три точки:

p3 широта = 52.66346360584388, 19.056108732273625

p1 широта = 52.66321959338828, 19.056379848488714

p2 широта = 52.66348185383115, 19.05648061759354

Закон косинусов и угол возврата atan2 44.797 градусов.Когда я отмечаю эти точки на картах Google и измеряю угол в gimp программе, у меня около 57 градусов.В других наборах точек различия такие же или больше.Что я делаю не так?

угол наклона

1 Ответ

0 голосов
/ 11 октября 2018

Для сферической геометрии вам нужно использовать специальные формулы отсюда

Посмотрите на сечение подшипников, рассчитайте подшипники от p3 до p2 и от p3 до p1 и найдите их разницу

Formula:    
  θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )
where   φ1,λ1 is the start point, 
   φ2,λ2 the end point (Δλ is the difference in longitude)

JavaScript:     (all angles     in radians)

var y = Math.sin(λ2-λ1) * Math.cos(φ2);
var x = Math.cos(φ1)*Math.sin(φ2) -
        Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1);
var brng = Math.atan2(y, x).toDegrees();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...