ios百度导航SDK,iOS开发之百度地图导航

若遇到疑难问题可以去   ios导航SDK 论坛问题  查看和反馈http://bbs.lbsyun.baidu.com/forum.php?mod=forumdisplay&fid=37 

阅读本篇文章之前需要看的文章有:

第一步: 按照开发指南配置好环境 http://lbsyun.baidu.com/index.php?title=ios-navsdk/guide/helloworld 

第二步:注册语音播报:SDK内置百度TTS语音播报功能,需要对应用进行授权验证才能够使用,因此需要主动注册应用相关信息。http://lbsyun.baidu.com/index.php?title=ios-navsdk/guide/voice 点击打开链接

第三步:http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=117414&extra=page%3D1 有关第三方库(MBProgressHUD、Reachability)冲突的帖子

v3.0.0的sdk跟一些第三方库(MBProgressHUD、Reachability)冲突,比如会报一些错误:

duplicate symbol _OBJC_CLASS_$_MBRoundProgressView in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_IVAR_$_MBRoundProgressView._annular in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_IVAR_$_MBRoundProgressView._backgroundTintColor in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_IVAR_$_MBRoundProgressView._progress in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_IVAR_$_MBRoundProgressView._progressTintColor in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_METACLASS_$_MBRoundProgressView in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Products/Debug-iphoneos/libMBProgressHUD.a(MBProgressHUD.o)

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(BNMBProgressHUD.o)

duplicate symbol _OBJC_CLASS_$_Reachability in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Intermediates/KSCarTuning.build/Debug-iphoneos/KSCarTuning.build/Objects-normal/armv7/Reachability.o

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(Reachability.o)

duplicate symbol _OBJC_METACLASS_$_Reachability in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Intermediates/KSCarTuning.build/Debug-iphoneos/KSCarTuning.build/Objects-normal/armv7/Reachability.o

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(Reachability.o)

duplicate symbol _kReachabilityChangedNotification in:

    /Users/niezhao/Library/Developer/Xcode/DerivedData/KSCarTuning-fvrfeynuvizhlhhblsqdjqledyuz/Build/Intermediates/KSCarTuning.build/Debug-iphoneos/KSCarTuning.build/Objects-normal/armv7/Reachability.o

    /Users/niezhao/Documents/niefeng/KSCarTuning/KSCarTuning/Source/Utils/Third/BaiduNaviSDK/libbaiduNaviSDK.a(Reachability.o)

ld: 11 duplicate symbols for architecture armv7

clang: error: linker command failed with exit code 1 (use -v to see invocation)

v3.0.0的sdk跟一些第三方库(MBProgressHUD、Reachability)冲突,因此紧急制做了一个修正版本,提供云盘下载链接如下:

v3.0.1修正版

链接: https://pan.baidu.com/s/1i5g53GL 密码: 758s

关于和地图sdk在模拟器下编译冲突的问题,有个临时解决方案:
可以把libbaiduNaviSDK.a移到“Linked Frameworks and Libraries”的最后一个,如图:



第四步:写入一下代码

AppDelegate.m 

#import "BNCoreServices.h"//百度导航

#define BAIDUMAP_APPKEY @"XUz2HUm7Bbj17lHES6B7wIAhYYBUSKi2"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //初始化导航SDK

    [BNCoreServices_InstanceinitServices:BAIDUMAP_APPKEY];

    [BNCoreServices_InstancestartServicesAsyn:nilfail:nil];

    returnYES;

}


KSCVendorMapViewController.m 

#import "BNCoreServices.h"//百度导航

@interface KSCVendorMapViewController ()<BNNaviRoutePlanDelegate,BNNaviUIManagerDelegate>

@property(nonatomic,assign)CLLocationCoordinate2D targetCoordinate;//应用内百度导航目的地(也就是供销商)经纬度


self.targetCoordinate = annotation.coordinate;//目的地坐标,这里可以替换为你们的目的地坐标

 //导航按钮,这里可以替换为你们的导航按钮

[popView.naviButtonaddTarget:selfaction:@selector(startNavi:)forControlEvents:UIControlEventTouchUpInside];



//导航线路

-(void) startNavi: (UIButton*) sender{

    

    if (![selfcheckServicesInited])return;

    [selfstartNavi];

}


- (void)startNavi

{

    //节点数组

    NSMutableArray *nodesArray = [[NSMutableArrayalloc]   initWithCapacity:2];

    BNRoutePlanNode *startNode = [[BNRoutePlanNodealloc]init];

    startNode.pos = [[BNPositionalloc]init];

    

    NSLog(@"百度地图:我的位置:long  %f, lat %f",self.userLocation.location.coordinate.longitude,self.userLocation.location.coordinate.latitude);

    

第一种:以前接过百度地图的可以这样写,但是建议写第二种

//    startNode.pos.x = self.userLocation.location.coordinate.longitude;//113.936392;

//    startNode.pos.y = self.userLocation.location.coordinate.latitude;//22.547058;

//    startNode.pos.eType = BNCoordinate_BaiduMapSDK;

第二种:特别注意**********

    CLLocation *myLocation = [BNCoreServices_LocationgetLastLocation]; //这里  [BNCoreServices_LocationgetLastLocation];方法得到的yLocation是原始的经纬度坐标,所以 startNode.pos.eType =BNCoordinate_OriginalGPS;  若使用的是百度地图坐标,可以使用BNTools类进行坐标转化

    startNode.pos.x = myLocation.coordinate.longitude;//经度116.339927

    startNode.pos.y = myLocation.coordinate.latitude;//纬度 39.947792

    NSLog(@"百度地图导航:我的位置:long  %f, lat %f",myLocation.coordinate.longitude, myLocation.coordinate.latitude);

//http://api.map.baidu.com/lbsapi/getpoint/index.html坐标反查位置不准确,因为类型为 BNCoordinate_OriginalGPS,而坐标反查的类型为BNCoordinate_BaiduMapSDK

    startNode.pos.eType =BNCoordinate_OriginalGPS;


    

    

    [nodesArray addObject:startNode];

    //终点

    BNRoutePlanNode *endNode = [[BNRoutePlanNodealloc]init];

    endNode.pos = [[BNPositionalloc]init];

    endNode.pos.x =self.targetCoordinate.longitude;//114.077075;

    endNode.pos.y =self.targetCoordinate.latitude;//22.543634;

    endNode.pos.eType =BNCoordinate_BaiduMapSDK;//经试验这里不是BNCoordinate_OriginalGPS

    [nodesArray addObject:endNode];

    

    [BNCoreServices_RoutePlan setDisableOpenUrl:YES];//不调用百度地图应用


    //打开百度导航UI上的路况,此路况针对所有路的路况(包含导航路线之外的道路的路况)

    [BNCoreServices_Strategy trySetShowTrafficInNavi:YES success:nil fail:nil];


    //发起路径规划

    [BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];

}




#pragma mark - BNNaviRoutePlanDelegate

//算路成功回调

-(void)routePlanDidFinished:(NSDictionary *)userInfo

{

    NSLog(@"算路成功");

    

    //路径规划成功,开始导航

    [BNCoreServices_UIshowPage:BNaviUI_NormalNavidelegate:selfextParams:nil];//self 指的是BNNaviUIManagerDelegate

}

//算路失败回调

- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary *)userInfo

{

    switch ([errorcode]%10000)

    {

        caseBNAVI_ROUTEPLAN_ERROR_LOCATIONFAILED:

            NSLog(@"暂时无法获取您的位置,请稍后重试");

            break;

        caseBNAVI_ROUTEPLAN_ERROR_ROUTEPLANFAILED:

            NSLog(@"无法发起导航");

            break;

        caseBNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:

            NSLog(@"定位服务未开启,请到系统设置中打开定位服务。");

            break;

        caseBNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:

            NSLog(@"起终点距离起终点太近");

            break;

        default:

            NSLog(@"算路失败");

            break;

    }

}


//算路取消回调

-(void)routePlanDidUserCanceled:(NSDictionary*)userInfo {

    NSLog(@"算路取消");

}




#pragma mark - BNNaviUIManagerDelegate


//退出导航页面回调

- (void)onExitPage:(BNaviUIType)pageType  extraInfo:(NSDictionary*)extraInfo

{


    if (pageType ==BNaviUI_NormalNavi)

    {

        NSLog(@"退出导航");

    }

    elseif (pageType ==BNaviUI_Declaration)

    {

        NSLog(@"退出导航声明页面");

    }

}



- (BOOL)checkServicesInited

{

    if(![BNCoreServices_InstanceisServicesInited])

    {

        UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"提示"

                                                           message:@"引擎尚未初始化完成,请稍后再试"

                                                          delegate:nil

                                                  cancelButtonTitle:@"OK"

                                                  otherButtonTitles:nil];

        [alertView show];

        returnNO;

    }

    returnYES;

}



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值