ios地图导航 ios地图导航怎么用语音_ios地图导航

ios地图导航 ios地图导航怎么用语音_Developer_02

若遇到疑难问题可以去   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:
libMBProgressHUD.a(MBProgressHUD.o)
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
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”的最后一个,如图:

ios地图导航 ios地图导航怎么用语音_ios地图导航_03

第四步:写入一下代码

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;
}