百度地图的坐标(北斗与GPS)转换问题
发表于2年前(2013-04-09 22:24) 阅读(2534) | 评论(2) 9人收藏此文章, 我要收藏
赞2
大约十一点零八发,秒杀云主机赢P8手机
百度地图 坐标 北斗 GPS 转换
先声明,这里的坐标转换api是JS交互的。
看过百度地图api的童鞋知道有个方法,可以将北斗或GPS的坐标转换为百度地图的球面坐标。
方法名称为:BMap.Convertor.translate(point,0,translateCallback);
具体参数就不解释了,请谷歌百度一下吧。
我想说的是,这个方法是一个回调的方法,point是北斗或GPS的坐标点,当坐标转换完成后使用translateCallback这个回调方法传回改变后的坐标点。
我很好奇为何需要用回调的方式来转换坐标点?直接给一个转换公式不是更好吗?
看代码。如果要使用BMap.Convertor.translate必须引入convertor.js,坐标转换的玄机就在这了
convertor.js的代码不多就30多行,看了老半天都没发现有什么坐标转换的公式
但有个意外收获,发现如下语句:
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是可以解读的
现在终于知道百度坐标点是如何完成转换的了。(其实还是不知道,看不到服务器的代码。。。)