国际经纬度坐标标准为WGS-84,国内要求必须至少使用国测局制定的GCJ- 02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施。百度对外接口的坐标系并不是GPS采集的真实经 纬度,需要通过坐标转换接口进行转换。
所以在进行百度地图开发时,如果我们手上的数据是GPS数据的话,需要进行坐标转换,转换方法如下:
URL: http://api./ag/coord/convert?from=0&to=4&x=longitude&y=latitude
其中:
from: 来源坐标系 (0表示原始GPS坐标,2表示Google坐标)
to: 转换后的坐标 (4就是百度坐标)
x: GPS经度
y: GPS纬度
返回的结果是一个json字符串:
{"error":0,"x":"MTIwLjAxMTYxNjkwMTA0","y":"MzYuMDA2NDI2NDI0Mzc1"}
其中:
error:是结果是否出错,"0"表示OK
x: 百度坐标系的经度(Base64加密)
y: 百度坐标系的纬度(Base64加密)
下面上代码:
public static double[] getBaiducoor(double[] coord)//坐标转换的方法{double longitude = coord[0];double latitude = coord[1];//需要转的gps经纬度string convertUrl = "http://api./ag/coord/convert?from=0&to=4&x=" + longitude + "&y=" + latitude + "";HttpWebRequest request = (HttpWebRequest).HttpWebRequest.Create(convertUrl);//创建http请求HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream responseStream = response.GetResponseStream();StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));string responseTxt = sr.ReadToEnd();sr.Close();sr.Dispose();CoorConvert mapconvert = new CoorConvert();//创建存放结果的对象mapconvert = JsonConvert.DeserializeObject<CoorConvert>(responseTxt);//赋值string lon = mapconvert.x;string lat = mapconvert.y;byte[] xBuffer = Convert.FromBase64String(lon);//坐标base64解密string strX = Encoding.UTF8.GetString(xBuffer, 0, xBuffer.Length);byte[] yBuffer = Convert.FromBase64String(lat);string strY = Encoding.UTF8.GetString(yBuffer, 0, xBuffer.Length);double[] coor = new double[2];coor[0] = Convert.ToDouble(strX);coor[1] = Convert.ToDouble(strY);return coor;}//创建一个对象存储结果public class CoorConvert{public string error { get; set; }public string x { get; set; }public string y { get; set; }}
需要添加Newtonsoft.Json引用解析返回的json结果字符串,此方法输入的参数是存储经纬度的double数组,返回结果也是double数组。