我們使用百度地圖進行經緯度定位往往會發現地圖呈現座標與實際座標不符。那是因爲我國規定地圖經緯度都要進行二次加密,如果要獲取實際經緯度對應的百度地圖經緯度座標,需要調用百度地圖提供的方法進行座標轉換。
代碼如下
/// <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的值