计算地理点之间角度的正确方法
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();
【讨论】:
非常感谢。你的回答解决了我的问题。以上是关于计算地理点之间角度的正确方法的主要内容,如果未能解决你的问题,请参考以下文章