CLLocationManager定位坐标不准确问题以及WGS_84转GCJ_02坐标位置纠错的方法

背景:

最近用高德的一个基于web的URI地图路径规划及导航模块,以实现根据起始坐标 实现路径规划,[见此处](http://lbs.amap.com/api/uri-api/guide/mobile-web/route-plan/)

起点是当前位置,由于没有集成高德API,所以用系统的CLLocationManager实现定位。

问题:

但是实际上,CLLocationManager定位的坐标,在高德地图上标注的位置与实际地点有偏差,并且较大!以前知道不同的地图坐标不能直接通用,但是如我所知,Apple的地图也是基于高德的,为什么CLLocationManager定位出的不准确,而MKMapView的定位却是准确的呢?

原因:

是这样的,按照国家统一的保密要求,任何一个地图产品都不允许使用GPS坐标,国内地图使用的坐标系统是GCJ-02GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌腾讯高德都在用这个坐标体系。

国内其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。百度(BD_09坐标)

到这里大家可能都猜出了CLLocationManager有偏差,是因为采用的是WGS-84,也就是GPS原始坐标;

Apple的MKMapView框架准确,是因为 老乔想进中国,就得按规矩来咯,所以iOS中的地图理所应当将WGS-84坐标转成了国内GCJ-02坐标;

解决:

思路一:

使用现有API转换,将CLLocationManager的WGS_84坐标转成GCJ_02坐标,调用apple的私有模块类MKLocationManager中得方法来对经纬度做一个偏移修正

问题:但是如此使用会审核被拒,而且iOS 5之后,这个方法已经不再使用。

思路二:

既然MKMapView地图中的定位是准确的,那么用[self.mapView setShowsUserLocation:YES]得了

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
  CLLocationCoordinate2D coord = [userLocation coordinate];
  NSLog(@"经度:%f,纬度:%f",coord.latitude,coord.longitude);
}

不足:需要将mapView加到父视图上,不然不会

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值