确定从一个纬度/经度到另一个的指南针方向

Kei*_*ler 0 algorithm pseudocode geospatial

有没有人有一个算法来确定从一个纬度/经度到另一个的方向(伪代码):

CalculateHeading( lat1, lon1, lat2, long2 ) returns string heading
Run Code Online (Sandbox Code Playgroud)

标题是NW,SW,E等.

基本上,我在地图上有两个点我希望得到一个方向的一般概念,考虑到东50英里和北一英里只是东方而不是东北.

Dea*_*ing 17

该站点具有基本算法:

// in javascript, not hard to translate...
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
        Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();
Run Code Online (Sandbox Code Playgroud)

更新:请参阅此处以获取完整的算法映射数学和Javascript

那会给你一个0到360之间的数字,然后只需要进行简单的查找:

var bearings = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];

var index = brng - 22.5;
if (index < 0)
    index += 360;
index = parseInt(index / 45);

return(bearings[index]);
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,当你在地球上移动时,你的方位实际上会发生变化.上面的算法显示了你的初始方位,但是如果你是长途旅行,当你到达目的地时你的方位会有很大差异(如果你只是在短距离[<几百公里]旅行,那么它可能赢了变化不足以成为一个问题.