百度地图经纬度纠偏

来源:互联网 发布:韩寒新作品2018 知乎 编辑:程序博客网 时间:2024/04/28 18:52

我们使用百度地图进行经纬度定位往往会发现地图呈现坐标与实际坐标不符。那是因为我国规定地图经纬度都要进行二次加密,如果要获取实际经纬度对应的百度地图经纬度坐标,需要调用百度地图提供的方法进行坐标转换。

代码如下

        /// <summary>        /// 转换为百度经纬度        /// </summary>        /// <param name="x"></param>        /// <param name="y"></param>        /// <returns></returns>        public static string ChangeToBD(string x, string y)        {            String path = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + x + "+&y=" + y + "&callback=BMap.Convertor.cbk_7594";            string res = SendDataByGET(path);            if (res.IndexOf("(") > 0 && res.IndexOf(")") > 0)            {                int sint = res.IndexOf("(") + 1;                int eint = res.IndexOf(")");                int ls = res.Length;                String str = res.Substring(sint, eint - sint);                int errint = res.IndexOf("error") + 7;                int enderr = res.IndexOf("error") + 8;                String err = res.Substring(errint, 1);                if ("0".Equals(err))                {                    int sx = str.IndexOf(",\"x\":\"") + 6;                    int sy = str.IndexOf("\",\"y\":\"");                    int endy = str.IndexOf("\"}");                    int sl = str.Length;                    string xp = str.Substring(sx, sy - sx);                    string yp = str.Substring(sy + 7, endy - sy - 7);                    byte[] outputb = Convert.FromBase64String(xp);                    string XStr = Encoding.Default.GetString(outputb);                    outputb = Convert.FromBase64String(yp);                    string YStr = Encoding.Default.GetString(outputb);                    return XStr + "," + YStr;                }            }            return string.Empty;        }        /// <summary>        /// 通过GET方式发送数据          /// </summary>        /// <param name="Url"></param>        /// <returns></returns>        public static string SendDataByGET(string Url)        {            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);            request.Method = "GET";            request.ContentType = "text/html;charset=UTF-8";            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            return retString;        }

代码中最关键的部分是

String path = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + x + "+&y=" + y + "&callback=BMap.Convertor.cbk_7594";

这是百度地图提供的接口,只需要提供x,y参数,就能获取正确的百度地图经纬度
在浏览器中输入网址http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=120&y=30&callback=BMap.Convertor.cbk_7594
得到结果


error表示0个错误
x为转换后的百度地图经度
y为转换后的百度地图纬度


注:无论使用使用什么语言编辑,代码核心都是这个网址,其他代码都是为了从结果字符串中获取x,y的值

原创粉丝点击