您当前的位置: iOS导航SDK > 开发指南 > 路径规划
路径规划

简述

通过设置起点和终点,可以发起路径规划,支持多个途径点和多种算路方式。详细的算路方式可以参考BNRoutePlanMode枚举类型。

坐标说明

百度iOS导航SDK接口的输入坐标支持GCJ02、WGS84、bd09ll,使用时请根据需要设置好相应参数即可,无需坐标转换。

相应的坐标系说明请参考坐标转换

发起算路

通过设置起点和终点,可以发起算路,另外你可以选择加入途径点,或者更换算路方式。

NSMutableArray *nodesArray = [[NSMutableArray alloc] initWithCapacity: 2];
 
//起点 
BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];
startNode.pos = [[BNPosition alloc] init];
startNode.pos.x = 113.936392;
startNode.pos.y = 22.547058;
startNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:startNode];
 
 //终点
BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];
endNode.pos = [[BNPosition alloc] init];
endNode.pos.x = 114.077075;
endNode.pos.y = 22.543634;
endNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:endNode];
 
// 发起算路
[BNCoreServices_RoutePlan  startNaviRoutePlan: BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self    userInfo:nil];

规划后的路线效果如图:

path.png

算路回调

算路是一个异步操作,可以通过以下几个委托函数回调算路结果

//算路成功回调
-(void)routePlanDidFinished:(NSDictionary *)userInfo
{
    NSLog(@"算路成功");
 
    //路径规划成功,开始导航
    [BNCoreServices_UI showPage:BNaviUI_NormalNavi delegate:self extParams:nil];
}
 
//算路失败回调
- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary *)userInfo
{
    NSLog(@"算路失败");
    switch ([error code]%10000)
    {
        case BNAVI_ROUTEPLAN_ERROR_LOCATIONFAILED:
            NSLog(@"暂时无法获取您的位置,请稍后重试");
            break;
        case BNAVI_ROUTEPLAN_ERROR_ROUTEPLANFAILED:
            NSLog(@"无法发起导航");
            break;
        case BNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:
            NSLog(@"定位服务未开启,请到系统设置中打开定位服务。");
            break;
        case BNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:
            NSLog(@"起终点距离起终点太近");
            break;
        default:
            NSLog(@"算路失败");
            break;
    } }
 
//算路取消
-(void)routePlanDidUserCanceled:(NSDictionary*)userInfo {
    NSLog(@"算路取消");
}

以上几个回调函数中参数userInfo为开发者发起算路时传递的userInfo参数。