记一次苹果定位偏移问题

 

记一次苹果定位偏移问题...



之前发现苹果系统的CLLocationManager定位一直会有偏移问题,而最近再一次有关于地图开发的问题,又发现偏移了。

索性就查查资料研究一下。

先说一下研究之前我的解决方式吧。程序内的显示效果是,当地图调用自身代理显示地理位置时候,是没有偏移的,定位点准确的显示在屏幕中央。而且这个代理在开启了需要显示自身位置的开关后,会每隔几秒钟调用一次,具体几秒不知道,也没研究,只是从程序运行的角度算了一下时间,大概一分钟。既然地图自身代理的位置是准确的,那我定位时候就用地图的用户坐标来显示位置。

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

这个就是地图的代理方法,当我把这个方法亮出来的时候,你一定会说这个方法不是位置改变的时候会调用么。你说的对,就是这样,前边说的只是诱导你。当然解决方法到目前还是这样。说到这,突然想到,如果是用地图自身的代理定位,那CLLocationManager这套定位是不是就可以取消掉了,貌似也可以。

好了,到这里可以我们可以说一下为什么会偏移:

国内地图使用的坐标系统是GCJ-02而ios sdk中所用到的是国际标准的坐标系统WGS-84。

因为国内使用的是加密后的坐标系GCJ-02就是网络上叫的火星坐标。

locationManager就是因为得到的是火星坐标偏移后的经纬度,所以导致在MapView上有很大的偏差,而在MKMapView上通过定位自己位置所获得的经纬度有是准确,因为apple已经对国内地图做了偏移优化。

原因知道了,那么我们说一下怎么解决偏移:

两种方案,

一种是针对苹果提供的私有API:(iOS5内支持)

http://blog.csdn.net/zhibudefeng/article/details/8495837

http://yach.me/blog/2011/11/09/huo-xing-zuo-biao-xi-wen-ti-zai-iosxia-de-xiu/

一种是将WGS-84转为GCJ-02(火星坐标):

这篇文章也通俗了讲了偏移的原因以及解决方式:

http://blog.csdn.net/swingpyzf/article/details/16972351

就到这里了,欢迎大家指正


    关注 IT艺术的殿堂


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册