C#中两个经纬度点之间的方向

13

我有两个经纬度坐标。

如何从点A(例如纽约37.149472,-95.509544)确定到点B(例如多伦多40.714269,-74.005973)的方向角度?

我需要一个类似于“340度”的值。

使用C#语言。

2个回答

27

如果你想要一个恒定的方位角跟随你,那么你不需要最短路径(大圆路径),而是需要一条渐变线。

转换可移植类型脚本

static double DegreeBearing(
    double lat1, double lon1, 
    double lat2, double lon2)
{   
    var dLon = ToRad(lon2-lon1);
    var dPhi = Math.Log(
        Math.Tan(ToRad(lat2)/2+Math.PI/4)/Math.Tan(ToRad(lat1)/2+Math.PI/4));
    if (Math.Abs(dLon) > Math.PI) 
        dLon = dLon > 0 ? -(2*Math.PI-dLon) : (2*Math.PI+dLon);
    return ToBearing(Math.Atan2(dLon, dPhi));
}

public static double ToRad(double degrees)
{
    return degrees * (Math.PI / 180);
}

public static double ToDegrees(double radians)
{
    return radians * 180 / Math.PI;
}

public static double ToBearing(double radians) 
{  
    // convert radians to degrees (as bearing: 0...360)
    return (ToDegrees(radians) +360) % 360;
}

// verify against the website example
DegreeBearing(50.36389,-4.15694,42.35111,-71.04083);

最后,使用System.Math的一个很好的理由。当然,每天都有很多人这样做,但这确实从未出现过。谢谢。 - tsilb
我不相信这段代码能够计算一个航向线。请参考 https://planetcalc.com/713/。如果需要初始方位角,可以直接将 https://www.movable-type.co.uk/scripts/latlong.html 上的 Java 代码翻译成 C#。 - fredm73
非常有用的代码.. 如何计算点是从东到西,从西到东,从南到北还是从北到南? - Steve Ed

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接