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

C# C中两个纬度/经度点之间的方向#,c#,mapping,geometry,gis,C#,Mapping,Geometry,Gis,我有两个坐标在Lat-Long格式 我如何从A点(如纽约37.149472,-95.509544)确定到B点(如多伦多40.714269,-74.005973)的角度方向 我在找一个像“340度”这样的值 在C#中,如果您查看了它的javascript,您可以将其重写为C。如果您想要一个恒定的方向,您不想要最短(大圆)的路径,您想要一条等角线 可移动类型脚本的转换 static double DegreeBearing( double lat1, double lon1, do

我有两个坐标在Lat-Long格式

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

我在找一个像“340度”这样的值


在C#

中,如果您查看了它的javascript,您可以将其重写为C。

如果您想要一个恒定的方向,您不想要最短(大圆)的路径,您想要一条等角线

可移动类型脚本的转换

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的好理由。哦,当然,很多人每天都这么做,但这真的从来没有出现过。谢谢。我不相信这个代码计算的是等角线。看见如果你想把Java代码的开头直接翻译成C语言,这是非常有用的代码。。如何计算从东西、东西、南北或南北走向的点的数量??