如何计算2个坐标之间的距离

ahm*_*ad 2 c#

我需要使用c#找到Windows 8.1应用程序中2点之间的距离(Km),所以我使用了下面的函数,但是返回的值不正确请求:

public static double DistanceTo(Double latitude1, Double longitude1, Double latitude2, Double longitude2)
    {
        var a = latitude1 - latitude2;
        var b = longitude1 - longitude2;

        return Math.Sqrt(a * a + b * b);
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*tos 7

你使用错误的公式.这就是你没有得到正确结果的原因.您使用的公式是我们用于计算同一平面中两点之间距离的公式,可以使用毕达哥拉定理证明.然而,当我们想要计算球体表面上两点之间的距离时(我们假设地球是一个完美的球体),我们不使用这种类型.

是一个带有正确公式的链接和JavaScript中的实现.

下面,我在C#中实现了一个

首先,我们必须定义一个方法,将一个角度作为参数,并以弧度为单位返回它的值.

public double ConvertToRadians(double angle)
{
    return (Math.PI / 180) * angle;
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以定义我们计算距离的方法:

public static double DistanceTo(double latitude1, 
                                double longitude1, 
                                double latitude2, 
                                double longitude2)
{
    // The radius of the earth in Km.
    // You could also use a better estimation of the radius of the earth
    // using decimals digits, but you have to change then the int to double.
    int R = 6371; 

    double f1 = ConvertToRadians(latitude1);
    double f2 = ConvertToRadians(latitude2);

    double df = ConvertToRadians(latitude1-latitude2);
    double dl = ConvertToRadians(longitude1-longitude2);

    double a = Math.Sin(d?/2) * Math.Sin(d?/2) +
    Math.Cos(f1) * Math.Cos(f2) *
    Math.Sin(d?/2) * Math.Sin(d?/2);

    double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a));

    // Calculate the distance.
    double d = R * c;

    return d; 
}
Run Code Online (Sandbox Code Playgroud)

如果你不想像上面那样实现它,你可以使用GeoCoordinate

表示由纬度和经度坐标确定的地理位置.还可以包括高度,准确度,速度和课程信息.

如果你这样做,那么:

var point1 = new GeoCoordinate(latitude1, longitude1);
var point2 = new GeoCoordinate(latitude2, latitude2);
Run Code Online (Sandbox Code Playgroud)

然后你得到下面point1和之间的距离point2:

point1.GetDistanceTo(point2);
Run Code Online (Sandbox Code Playgroud)