背景:
最近用高德的一个基于web的URI地图路径规划及导航模块,以实现根据起始坐标 实现路径规划,[见此处](http://lbs.amap.com/api/uri-api/guide/mobile-web/route-plan/)
起点是当前位置,由于没有集成高德API,所以用系统的CLLocationManager实现定位。
问题:
但是实际上,CLLocationManager定位的坐标,在高德地图上标注的位置与实际地点有偏差,并且较大!以前知道不同的地图坐标不能直接通用,但是如我所知,Apple的地图也是基于高德的,为什么CLLocationManager定位出的不准确,而MKMapView的定位却是准确的呢?
原因:
是这样的,按照国家统一的保密要求,任何一个地图产品都不允许使用GPS坐标,国内地图使用的坐标系统是GCJ-02。GCJ-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加到父视图上,不然不会