计算地理点之间角度的正确方法

Posted

技术标签:

【中文标题】计算地理点之间角度的正确方法【英文标题】:Correct way of computing angle between geopoints 【发布时间】:2018-10-11 14:28:51 【问题描述】:

我在计算连接三个地理点创建的线之间的角度时遇到问题。

p1
    \    p2
     \  /
     p3

我实施了许多解决方案,但没有给我预期的结果。例如,我使用了余弦定律 Direct way of computing clockwise angle between 2 vectors 。 我也用了方程

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 度。当我在谷歌地图中标记这个点并在 gimp 程序中测量角度时,我大约有 57 度。在其他组点中,差异相同或更大。我做错了什么?

gimp angle

【问题讨论】:

使用球坐标。 【参考方案1】:

对于球面几何,您需要使用特殊公式from here

查看轴承截面,计算从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();

【讨论】:

非常感谢。你的回答解决了我的问题。

以上是关于计算地理点之间角度的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

使用sql oracle计算地理点之间的距离

计算大型数据集的地理点之间的距离

计算两个纬度/经度点之间的角度

PHP地理位置计算

Java:以度为单位计算两点之间的角度

利用SQL计算两个地理坐标(经纬度)之间的地表距离