我需要使用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);
}
答案 0 :(得分:7)
你使用了错误的公式。这就是你没有得到正确结果的原因。 您使用的公式是我们用于计算两点之间距离的公式 在同一平面上,可以用毕达哥拉定理证明。然而,当我们想要计算球体表面上两点之间的距离时(我们假设地球是一个完美的球体),我们不使用这种类型。
Here是一个包含正确公式和JavaScript实现的链接。
下面,我在C#中实现了
首先,我们必须定义一个方法,该方法将角度作为参数,并以弧度为单位返回它的值。
public double ConvertToRadians(double angle)
{
return (Math.PI / 180) * angle;
}
然后我们可以定义我们计算距离的方法:
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;
}
如果你不想像上面那样实现它,你可以使用GeoCoordinate
类,
表示由纬度和纬度确定的地理位置 经度坐标。也可能包括高度,准确度,速度和 课程信息。
如果你这样做,那么:
var point1 = new GeoCoordinate(latitude1, longitude1);
var point2 = new GeoCoordinate(latitude2, latitude2);
然后你得到point1
和point2
之间的距离,如下所示:
point1.GetDistanceTo(point2);
答案 1 :(得分:1)
尝试这样的事情:
var coord1 = new GeoCoordinate(lat1, long1);
var coord2 = new GeoCoordinate(lat2, long2);
var distance = coord1.GetDistanceTo(coord2);
看here。好像是重复的