x(经度) y(纬度)  
108.600815 26.504459  A地
108.510556 26.471181 B地在C#中如何计算两地距离?

COS(RADIANS(By))*COS(RADIANS(Ay))*COS(RADIANS(Bx-Az))+SIN(RADIANS(By))*SIN(RADIANS(Ay))

解决方案 »

  1.   

    这个倒没整过,既然都有公式了,网上找一下,以前记着有看过RADIANS SIN COS的算法,还是找一下先~
      

  2.   

    有公式,往里传值就行了吧Ay是A点的Y轴坐标,可以视为纬度,其它同理
      

  3.   

            private const double EARTH_RADIUS = 6378.137;
            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 * EARTH_RADIUS;
                s = Math.Round(s * 10000) / 10000;
                return s;
            }
      

  4.   

    A到B的距离,采用勾股定律=A点经度-B点的经度的平方值+A点纬度-B点的纬度的平方值开根号
      

  5.   

    /// <summary>
            /// 根据经度和纬度求两点之间的距离(单位:米)
            /// </summary>
            /// <param name="lng1">经度</param>
            /// <param name="lat1">纬度</param>
            /// <param name="lng2">经度</param>
            /// <param name="lat2">纬度</param>
            /// <param name="gs"></param>
            /// <returns>返回距离</returns>
    public static double DistanceOfTwoPoints(double lng1,double lat1,  double lng2, double lat2, GaussSphere gs)
            {            
                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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0));
                s = Math.Round(s * 10000) / 10000;
                return s;
            }
            
            private static double Rad(double d)
            {
                return d * Math.PI / 180.0;
            }    GaussSphere 为自定义枚举类型
        /**//// <summary>
        /// 高斯投影中所选用的参考椭球
        /// </summary>
        public enum GaussSphere
        {
            Beijing54,
            Xian80,
            WGS84,
        }
      

  6.   

    GetDistance(90, 0, 91, 0),返回的是111.3195
    A:90,0 B:91,0 即是赤道上纬度1度距离。
    根据
    http://hi.baidu.com/mingyue16/blog/item/be22dc0be1aa801694ca6b62.html
    纬度1度 = 大约111km
     
      

  7.   

    1个经度 = 2 x 3.1415926 x 6371 / 360 x cos a 
    = 111.2 cos a (公里) 
    其中,a 代表纬度。如在赤道,一个经度就约为111公里。
    经度相隔一度的长度,随着所在位置的纬度不同而有差异
    在赤道上,360度的经度跨越40000公里左右,所以1度跨越距离为111.11公里
    但是在两极的极点上,经度1度所跨越的距离只是为0
    纬度相隔一度之间的距离倒是差不多恒定的,跨越的距离为一个经线圈的三百六十分之一,约等于111公里
    1度等于60分,1分等于60秒