因为App需要调用第三方导航软件导航,后台返回的百度系GPS,但是发现调用高德导航就要准确一些,调用苹果自带的地图导航偏差很大,查阅了相关资料如下
高德地图、腾讯地图以及谷歌中国区地图使用的是GCJ-02坐标系
百度地图使用的是BD-09坐标系
苹果自带地图在国内使用高德提供的数据,所以使用的是GCJ-02坐标系
找到原因后需要把gps转换为高德坐标系,在网上找了gps转换GCJ02的一些方法。转化后导航偏差也有点大。所以直接使用高德提供的Api有两种
一种是调在线Api:
https://lbs.amap.com/api/webservice/guide/api/convert/
二种是调用SDK方法
https://lbs.amap.com/api/ios-sdk/guide/computing-equipment/amap-calculate-tool
我直接使用调用SDK。直接上代码
// 苹果地图导航
+ (void)navAppleMap:(NSString *)lat lng:(NSString *)lng
{
//坐标转换
CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(lat.doubleValue, lng.doubleValue);
//将GPS转成高德坐标
CLLocationCoordinate2D amapcoord = AMapCoordinateConvert(loc, AMapCoordinateTypeGPS);
//用户位置
MKMapItem *currentLoc = [MKMapItem mapItemForCurrentLocation];
//终点位置
MKMapItem *toLocation = [[MKMapItem alloc]initWithPlacemark:[[MKPlacemark alloc]initWithCoordinate:amapcoord addressDictionary:nil] ];
NSArray *items = @[currentLoc,toLocation];
NSDictionary *dic = @{
MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsMapTypeKey : @(MKMapTypeStandard),
MKLaunchOptionsShowsTrafficKey : @(YES)
};
[MKMapItem openMapsWithItems:items launchOptions:dic];
}
如果后台返回的是百度经纬度,使用以下方法
//将GPS转成高德坐标
CLLocationCoordinate2D amapcoord = AMapCoordinateConvert(loc, AMapCoordinateTypeBaidu);