C# Web 服务 通过两个地名算出距离。比如北京到上海两个地名算出两地之间的距离。

解决方案 »

  1.   


    嗯,通过地址取出经纬度,然后再算距离。但是百度貌似没有google那种API啊?
      

  2.   

    用GPS全球定位系统做的好,否则得到的数据意义不大
      

  3.   

            string address = "达州";
            string output = "json";
            string ak = "百度ak值";
            string url = string.Format("http://api.map.baidu.com/geocoder/v2/?address={0}&output={1}&ak={2}", address, output, ak);        // 送出要求
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            // 取得回應
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            //得到一个json字符串
            string tmpArray = sr.ReadToEnd().ToString();在百度API上面找到了答案,谢谢楼上两位了。我纳闷为毛谷歌的那个取出来的老是0呢?
      

  4.   

    百度那个可以解决,但如果能再本地解决岂不更好,我这里有现成的方法,
      private const double EARTH_RADIUS = 6378.137; //地球半径        /// <summary>
            /// 获得两点之间的距离 单位米
            /// </summary>
            /// <param name="lat1">A点纬度</param>
            /// <param name="lng1">A点经度</param>
            /// <param name="lat2">B点纬度</param>
            /// <param name="lng2">B点经度</param>
            /// <returns></returns>
            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 = s * 10000000 / 10000;
                 
                return s;
            }
           private static double rad(double d)
            {
                return d * Math.PI / 180.0;
            }