Android 笔记38: BAIDU MAP API GPS数据定位偏移校正

其实也不太和android沾边,刚好应用中希望调用到地图。为什么选百度你懂的,gmap在天朝被穿小鞋..时不时无法连接。


先列参考文
百度提供的各种地图API http://dev.baidu.com/wiki/static/index.htm
百度静态图API 说明 http://dev.baidu.com/wiki/map/index.php?title=%E9%9D%99%E6%80%81%E5%9B%BEAPI
百度地图坐标系转换 http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_5#0&5
百度地图API经纬度转换接口(url失效) http://www.biaodianfu.com/baidu-ditu-api-map-coordinate.html
百度地图坐标系转换(日志) http://www.cnblogs.com/jz1108/archive/2011/10/11/2207245.html

嗯然后因为我的最初需求也简单,我选择了最简单的静态图API
然后用手机GPS获得办公室的窗边的读数进行了测试

http://api.map.baidu.com/staticimage?zoom=14&markers=113.3658121,23.1256510666
(呃,暴露了我的办公地址..)

打开,发现位置漂到几公里外城中村里去了

OK很郁闷,起初不知道是定位不准还是设备和API水土不服还是...
推测了很多,过程略,因为最末都发现是瞎操心

直接给结论:百度的地图API也要求对经纬度参数进行偏移量加密计算,以下摘引转载网上的某博文

通常GPS获取的经纬度属于WGS84坐标体系,在我国,这个坐标是不能直接应用在互联网服务上的,至少要经过国家测绘局的加密。google map在中国大陆地区的数据使用的就是经过国测局加密之后的坐标系,而google earth在中国地区仍然使用的是WGS84坐标系。


那怎么办呢?答案已经昭然若揭,随手搜索后找到了若干的解决办法,最方便可靠的无疑是用百度自己提供的一个校正坐标的接口对GPS数据进行校正。这种上有政策下有对策的做法,我感到无奈又可笑..泱泱大国啊..。
校正接口的具体地址我就不贴出来了,获得渠道和用法自己到参考文link里细读,有的.

http://{校正api}/convert?from=0&to=4&x=113.3658121&y=23.1256510666
经过校正后返回字符串
{"error":0,"x":"MTEzLjM3Nzc5Mjc5NzY3","y":"MjMuMTI5MTU1NTI0ODY0"} 里面包含了两串base64加密的经纬度坐标数据,解密后

再套上静态图API
http://api.map.baidu.com/staticimage?zoom=17&markers=113.37779279767,23.129155524864

Bingo!



**备忘**
1.  ditu.baidu.com 是不支持直接输入经纬度坐标进行搜寻定位的,这也太.....!@#¥!@#¥!
2. baidu map api与gmap api的输入经纬度参数(longitude,latitude)的顺序是相反的,百度是先lat再lon 我擦..

转载自:http://snmoney.blog.163.com/blog/static/440058201192153336166/

你可能感兴趣的:(Android軟件開發,Java語言)