iOS 调用苹果自带地图导航不准确问题解决

因为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);

你可能感兴趣的:(iOS 调用苹果自带地图导航不准确问题解决)