记一次苹果定位偏移问题
记一次苹果定位偏移问题...
之前发现苹果系统的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艺术的殿堂
微信扫一扫关注公众号