先聲明,這裏的座標轉換api是JS交互的。 api
看過百度地圖api的童鞋知道有個方法,能夠將北斗或GPS的座標轉換爲百度地圖的球面座標。 服務器
方法名稱爲:BMap.Convertor.translate(point,0,translateCallback); 異步
具體參數就不解釋了,請谷歌百度一下吧。 函數
我想說的是,這個方法是一個回調的方法,point是北斗或GPS的座標點,當座標轉換完成後使用translateCallback這個回調方法傳回改變後的座標點。 測試
我很好奇爲什麼須要用回調的方式來轉換座標點?直接給一個轉換公式不是更好嗎? 編碼
看代碼。若是要使用BMap.Convertor.translate必須引入convertor.js,座標轉換的玄機就在這了 spa
convertor.js的代碼很少就30多行,看了老半天都沒發現有什麼座標轉換的公式 code
但有個意外收穫,發現以下語句: 回調函數
var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from="+ type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;
瞬間發現上當了,終於明白爲何要使用回調這麼麻煩的方法來完成座標轉換的問題了。 百度地圖
原來座標的轉換的公式根本就不想給你看到,百度轉換座標的方法是這樣的:
1 獲取原始的北斗或GPS的座標值
2 將座標點發送到api.map.baidu.com/ag/coord/convert?...
3 有返回值後調用回調函數,將轉換後的座標點給你
這使用回調是由於須要向另一個地址請求處理,是異步的操做。
實驗一下這個連接,返回以下:
{"error":0,"x":"MTA4LjI5Njc5Mzc.....","y":"MjIuODQzMTM2MDE....."}ps:沒有傳入 callback=BMap.Convertor值。值不徹底我省略了,否則你就知道我在哪了。
這個結果貌似有點出人意料,x和y的值並不是咱們想一想要的座標點
作個測試:
test_point = new BMap.Point("MTA4LjI5Njc5Mzc.....", "MjIuODQzMTM2MDE.....");
alert(test_point.lng + ":" + test_point.lat);
發現其實這些值是編碼後的座標點,無論是什麼編碼方式,用百度的API是能夠解讀的
如今終於知道百度座標點是如何完成轉換的了。(其實仍是不知道,看不到服務器的代碼。。。)