我在网上找到 下面这个算法,其他的也差不多,
但是我在计算 43.84038,87.564988 这个点的距离时候出现了问题
点1 "41.72145,86.22025",
点2 "43.86264,87.61198",
事实上点2 的距离更近, 但是下面的算法是点1的值近. 是哪里出了问题?
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) +
Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
s = s * EarthRadiusKm;
s = Math.Round(s * 10000) / 10000;
return s;
}
------解决思路----------------------
地球不是完美的球形,要精确的算经纬度所在的地方,公式非常复杂的
如果不要求太精确,可以当做球形来算,引入球坐标公式,计算两个球面上的点的弧线距离
如果只是求谁更近,可以试试把维度乘以4再和经度一起当做距离计算
------解决思路----------------------
如果你计算的点,距离不是相差很大,你直接改直线算法得了
------解决思路----------------------
一种公式计算的是两点间的直线距离,一种公式计算的是两点间的球面上的连线弧的距离,你得自己核实一下