百度地图偏移

坐标转换服务

坐标转换接口说明

将其他坐标系转换到百度坐标系。接口样例如下:
http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=116.254615&y=29.814476
参数说明:
x/y:经纬度坐标
from/to:决定转换效果,具体参数天填充如下:

坐标系

参数

WGS-84坐标系(GPS)

from=0,to=4

GCJ-02坐标系(谷歌、soso、搜狗)

from=2,to=4

51地图坐标系

(需要先将51地图坐标除10000)from=2,to=4

mapbar坐标系

需要先调用后面的转换算法,得到WGS84坐标,再使用:from=0,to=4

返回结果:
json数组,error表明错误号,x、y是经过base64加密的字符串,需要自反解

 

附:mapbar坐标转换算法,输入为mapbar坐标,输出为gps坐标(js代码描述)

function mapBar2WGS84(x,y){
x = parseFloat(x)*100000%36000000;
y = parseFloat(y)*100000%36000000;

x1 = parseInt(-(((Math.cos(y/100000))*(x/18000))+((Math.sin(x/100000))*(y/9000)))+x);
y1 = parseInt(-(((Math.sin(y/100000))*(x/18000))+((Math.cos(x/100000))*(y/9000)))+y);

x2 = parseInt(-(((Math.cos(y1/100000))*(x1/18000))+((Math.sin(x1/100000))*(y1/9000)))+x+((x>0)?1:-1));
y2 = parseInt(-(((Math.sin(y1/100000))*(x1/18000))+((Math.cos(x1/100000))*(y1/9000)))+y+((y>0)?1:-1));

return [x2/100000.0,y2/100000.0];
}

 

限制

每秒访问少于50次

 

示例

利用JSONP的方式,进行跨域访问。示例链接:

http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_6#0&6

 

批量坐标转换接口(高级)

接口参数说明:

1.单组坐标转换与以前请求的url格式不变

2.批量坐标转换请求url多加一个参数‘mode’,当mode=1时请求批量坐标转换接口,当mode为其他值时请求单组坐标转换接口。

参数中每组x坐标间以逗号分隔,每组y坐标间以逗号分隔。如:

http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=40,50&y=116,117&mode=1

3.批量坐标转换坐标组数上限为20个,超过20个则只返回20个结果

 

返回结果说明:

1.数据以json格式返回

2.单组坐标转换返回格式与之前相同

3.批量坐标转换返回格式:

[{"error":0,"x":"NDAuMDA2NjY4MzUzNTg3","y":"MTE2LjAwNTkyMzYyNTU1"},{"error":0,"x":"NTAuMDA2Njc1NDk5OTY3","y":"MTE3LjAwNTkyNDk5OTg1"}]

批量转换限制

每秒访问少于50次,一次20个。

 

批量示例

利用JSONP的方式,进行跨域访问。示例链接:

http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_7#0&7

 

     /// <summary>
        /// 根据偏移坐标获取百度正确的坐标
        /// </summary>
        /// <param name="xy">x+","+y</param>
        /// <returns></returns>
        public string getbaidupy(string xy)
        {
            string x = xy.Split(',')[0];
            string y = xy.Split(',')[1];
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=" + x + "&y=" +y);
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader str = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string[] s = str.ReadToEnd().ToString().Split(':');
            x = Encoding.Default.GetString(Convert.FromBase64String(s[2].ToString().Substring(1, s[2].IndexOf(',') - 2)));
            y = Encoding.Default.GetString(Convert.FromBase64String(s[3].ToString().Substring(1, s[3].IndexOf('}') - 2)));
            return x + "," + y;   
        }

 

     /// <summary>
        /// 根据偏移坐标获取百度正确的坐标(20个坐标)
        /// </summary>
        /// <param name="xy">x=40,50|y=116,117</param>
        /// <returns></returns>
        public string getbaidupy1(string xy)
        {
            StringBuilder sbxy = new StringBuilder();
            string xx = "";
            string yy = "";
            string[] s2 = null;
            string x = xy.Split('|')[0];
            string y = xy.Split('|')[1];
            //批量坐标转换接口
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=" + x + "&y=" + y+"&mode=1");
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader str = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string s = str.ReadToEnd().ToString();
            string[] s1 = s.Substring(1, s.Length - 2).Split('}');
            for (int i = 0; i < s1.Length-1; i++)
            {
                 s2 = s1[i].Split(':');
                 xx = Encoding.Default.GetString(Convert.FromBase64String(s2[2].ToString().Substring(1, s2[2].IndexOf(',') - 2)));
                 yy = Encoding.Default.GetString(Convert.FromBase64String(s2[3].ToString().Substring(1,s2[3].Length-2)));
                 sbxy.Append(xx+","+yy+"?");
            }
            return sbxy.ToString();
        }

 

 

posted @ 2013-02-05 17:11  Damon201611  阅读(816)  评论(0编辑  收藏  举报