当前位置: 代码迷 >> C# >> 求2个中纬度距离的算法
  详细解决方案

求2个中纬度距离的算法

热度:107   发布时间:2016-05-05 04:11:42.0
求2个经纬度距离的算法
我在网上找到 下面这个算法,其他的也差不多,
但是我在计算 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再和经度一起当做距离计算
------解决思路----------------------
如果你计算的点,距离不是相差很大,你直接改直线算法得了
------解决思路----------------------
一种公式计算的是两点间的直线距离,一种公式计算的是两点间的球面上的连线弧的距离,你得自己核实一下
  相关解决方案