一尘不染

计算两个经纬度地理坐标之间的距离

c#

我正在计算两个地理坐标之间的距离。我正在针对3-4个其他应用测试我的应用。在计算距离时,我的平均计算速度通常为3.3英里,而其他应用程序则为3.5英里。这对我要执行的计算有很大的不同。是否有用于计算距离的优质类库?我在C#中这样计算:

public static double Calculate(double sLatitude,double sLongitude, double eLatitude, 
                               double eLongitude)
{
    var radiansOverDegrees = (Math.PI / 180.0);

    var sLatitudeRadians = sLatitude * radiansOverDegrees;
    var sLongitudeRadians = sLongitude * radiansOverDegrees;
    var eLatitudeRadians = eLatitude * radiansOverDegrees;
    var eLongitudeRadians = eLongitude * radiansOverDegrees;

    var dLongitude = eLongitudeRadians - sLongitudeRadians;
    var dLatitude = eLatitudeRadians - sLatitudeRadians;

    var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + 
                  Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) * 
                  Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);

    // Using 3956 as the number of miles around the earth
    var result2 = 3956.0 * 2.0 * 
                  Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1));

    return result2;
}

我可能做错了什么?我应该先以公里为单位计算,然后转换为英里吗?


阅读 1310

收藏
2020-05-19

共1个答案

一尘不染

会有地理座标类(.NET框架4和更高)已经有GetDistanceTo方法。

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);

距离以米为单位。

您需要引用System.Device。

2020-05-19