随笔 - 11  文章 - 1 评论 - 2 trackbacks - 0

对于刚接触android lbs应用的同学来说,混乱的坐标系转换是个令人头疼的事。我就在这里,把我所知道的一些关于android定位的坐标系相关的知识拿出来与大家分享,由于个人水平所限,如果有错误或纰漏,还望同学们不吝指正,互相交流,共同进步。

好了,闲话不多说。

按照正常的思路,我们通过GPS或者基站定位等方式获取到经纬度信息后,把它放到地图上,就能够完成定位。但实际上,我们很有可能会在实际操作中发现,我们的定位出现了较大的偏移。这是因为我国出于国家安全(或者¥@#%¥##)的考虑,会将所有的电子地图经行加偏处理,由真实的地理坐标系又称地球坐标系(WGS84)转换为火星坐标系(GCJ02)。这就是我们定位出现偏移的原因,也是坐标系问题产生的根源。

那么,我们要怎样处理坐标系问题呢。就以我们常用的百度与高德地图api为例来说明。百度地图的坐标系是在火星坐标系的基础上又自行加密的BD09坐标系,高德地图的坐标系是常见的火星坐标系GCJ02。那么很好理解了,既然百度地图是BD09坐标系的,那么通过百度地图API获得的经纬度也是BD09坐标系的,直接显示,没有问题;同理,通过高德地图API获得的经纬度也一定是GCJ02的,可以在高德地图上直接显示。但是我们如果没有调用第三方地图API,而是使用android.location获取的经纬度,或者是通过手持或车载的GPS终端获取的经纬度,那就是属于WGS84的真实的地理坐标,这时候,直接在百度或者高德地图上显示是会出现偏移的。

那么,遇到经纬度与地图的坐标系不相符的情况下,怎么办呢?最优的办法就是调用你所使用的地图的服务商提供的坐标系转换接口,有可能是付费接口。不推荐使用网上流传甚广的地球坐标系与火星坐标系转换算法,实测误差较大。如果,实在没有办法的话,在小范围内,给经纬度加一个固定的修正值,也勉强可用。注意,是小范围,因为加偏虽然不是线性的,但是一定范围的的偏移量不会相差太大,通过一个固定的修正值,还是能够在小范围内提高定位精度的。至于这个范围怎么确定,我也不知道...

当我们拿到自己的当前经纬度时,如何确定它是属于哪个坐标系的呢?当然是在地图上试一下喽。

火星坐标系(GCJ02)可以在谷歌地图或者高德地图中直接输入定位进行查看。谷歌地图http://ditu.google.cn/ 支持直接输入“纬度,经度”定位

高德地图http://www.amap.com/ 也支持直接输入“纬度,经度”定位

 

地球坐标系(WGS84)无法找到匹配的电子地图,但是我们万能的Google有谷歌地球,可以输入WGS84坐标系的经纬度进行定位,下载谷歌地球太麻烦,不怕,在这里http://www.earthol.com/   我们可以直接查看

是不是方便快捷。

百度地图是不支持直接输入经纬度定位的,但是,我还有办法,http://www.cnblogs.com/productivity/p/3341309.html 提供了比较好用的百度坐标转换工具,能转了,还怕显示不了么。

 

posted on 2014-01-20 20:59  二十年梨花  阅读(...)  评论(...编辑  收藏