先声明,这里的坐标转换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是能够解读的
如今终于知道百度坐标点是如何完成转换的了。(其实仍是不知道,看不到服务器的代码。。。)