全部服务产品
开发者频道
定价
登录
驾车路线规划
下载开发文档
基本介绍

导航SDK支持驾车、货车、摩托车三种不同的路线规划类型,目前仅支持在线,也即需要联网才能使用。相关的接口和回调在BNRoutePlanManagerProtocol.h。这个头文件主要包含以下2点:

1、BNRoutePlanManagerProtocol

路线规划模块对外提供的接口,包括发起算路、获取路线节点、设置算路节点等能力。

2、BNNaviRoutePlanDelegate

路线规划模块对外提供的回调,包括算路成功、失败等回调。

路线规划接口

驾车、货车、摩托车的路线规划接口如下:

//接口
/**
* 发起算路
*
* @param eMode 算路方式,定义见BNRoutePlanMode
* @param naviNodes 算路节点数组,起点、途经点、终点按顺序排列,节点信息为BNRoutePlanNode结构
* @param naviTime 发起算路时间,用于优化算路结果,可以为nil
* @param delegate 算路委托,用于回调
* @param userInfo 用户需要传入的参数,货车导航算路需要传入BNaviTripTypeKey,值为BN_NaviTypeTruck
* 支持传入参数:
*BNaviTripTypeKey:NSNumber *, 可选,BN_NaviType类型,不传默认为驾车。
*(1)货车,传@(BN_NaviTypeTruck)
*(2)驾车,传@(BN_NaviTypeReal)
*(3)摩托车,传@(BN_NaviTypeMoto)
*/
- (void)startNaviRoutePlan:(BNRoutePlanMode)eMode
naviNodes:(NSArray*)naviNodes
time:(BNaviCalcRouteTime*)naviTime
delegete:(id<BNNaviRoutePlanDelegate>)delegate
userInfo:(NSDictionary*)userInfo;
算路策略

算路策略,也即算路接口中的eMode字段。导航SDK提供8种驾车策略,对应BNRoutePlanMode枚举。

枚举值含义支持的类型
BNRoutePlanMode_Recommend智能推荐驾车/摩托车/货车
BNRoutePlanMode_NoHeighWay不走高速驾车/摩托车/货车
BNRoutePlanMode_LessToll少收费驾车/摩托车
BNRoutePlanMode_LessJam躲避拥堵驾车/摩托车/货车
BNRoutePlanMode_SaveTime时间优先驾车/摩托车/货车
BNRoutePlanMode_MainRoad高速优先驾车/摩托车/货车
BNRoutePlanMode_EconomicRoute省钱路线货车
算路节点

每一个算路节点为BNRoutePlanNode类,其中pos字段是必选字段。

以下2点需要注意:

(1)如果算路的起点是用户当前的位置,需要把路线节点的title设置为【我的位置】

(2)uid字段如果有值的话,需要赋值,提升路线的准确性。

/// 路径规划节点
@interface BNRoutePlanNode : NSObject
/**
* 位置,经纬度信息,必选
*/
@property(nonatomic,strong)BNPosition* pos;
/**
* uid,绑路用,有uid时需传入,可提高算路准确性,可选
*/
@property(nonatomic,strong)NSString* uid;
/**
* 城市ID,可选
*/
@property(nonatomic,strong)NSString *cityID;
/**
* 描述信息(如家,公司,地图上选的点,我的位置等),可选
*/
@property(nonatomic,copy)NSString* title;
/**
* 地址信息(如上地十街十号百度大厦),可选
*/
@property(nonatomic,copy)NSString* address;
/// 途径点偏好算路使用,普通类型算路不需要使用,可选
@property(nonatomic, assign)BNRoutePlanMode routePlanMode;
@end

路线规划节点的坐标类如下:

/// 位置原始坐标
@interface BNPosition : NSObject
/**
* 经度
*/
@property(nonatomic,assign)double x;
/**
* 纬度
*/
@property(nonatomic,assign)double y;
/**
* 坐标系类型,默认是BNCoordinate_OriginalGPS
*/
@property(nonatomic,assign)BNCoordinate_Type eType;
+ (BNPosition *)positionFromCoordinate:(CLLocationCoordinate2D)coord;
@end

路线规划支持的坐标类型如下:

typedef enum
{
BNCoordinate_OriginalGPS = 0,/**< 从iOS系统获取的原始经纬度坐标 */
BNCoordinate_BaiduMapSDK = 1,/**< 从百度地图中获取的sdk,bd09ll坐标类型 */
BNCoordinate_GCJ = 2 /**国测局*/
}BNCoordinate_Type;
userInfo参数

算路接口的最后一个参数为userInfo参数,该参数是一个NSDictionary*类型,开发者可以使用该参数实现以下功能:

(1)指定本次算路的类型,具体如下:

key:
BNaviTripTypeKey:NSNumber *, 可选,BN_NaviType类型,不传默认为驾车。
value如下:
*1)货车,传@(BN_NaviTypeTruck)
*2)驾车,传@(BN_NaviTypeReal)
*3)摩托车,传@(BN_NaviTypeMoto)
比如 @{BNaviTripTypeKey : @(BN_NaviTypeTruck)}表示货车算路。

(2)区别不同的算路,传入userInfo的参数,会在算路完成的回调里,再回传给开发者。开发者可以利用这一点区分不同的算路。

注意:导航SDK同时只能支持一次算路。比如发起从A->B的算路,A->B算路还没成功时,再次发起C->D的算路,则A->B的算路会被取消。
设置车牌

在算路之前,可以先设置车牌,再调用算路接口发起算路。可以按照如下方法设置驾车车牌信息:

- (void)setCarPlateInfo {
//设置车牌号码 两种都支持 默认普通车
/* 方式1 [BNaviService_Strategy syncCarNumber:@"粤B86544"];*/
/*方式2 [BNaviService_Strategy syncCarNumber:@"粤B86544" carType:BNTruckCarTypeCommon];*/
BMCarInfoModel *carInfo = [[BMCarInfoModel alloc] init];
carInfo.carNumber = @"粤B86544";
carInfo.truckCarType = BNTruckCarTypeCommon;
[BNaviService_Strategy syncCarModel:carInfo];
}
算路结果回调

算路成功和失败的回调如下:

/**
* 算路成功回调
*
* @param userInfo 用户信息
*/
- (void)routePlanDidFinished:(NSDictionary*)userInfo;
/**
* 算路失败回调
*
* @param error 失败信息
* @param userInfo 用户信息
*/
- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary*)userInfo;
使用说明
1. 设置路线节点信息
// 节点数组
NSMutableArray *nodesArray = [[NSMutableArray alloc] init];
// 起点
BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];
startNode.pos = [[BNPosition alloc] init];
startNode.pos.x = 113.948222;
startNode.pos.y = 22.549555;
startNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:startNode];
// 终点
BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];
endNode.pos = [[BNPosition alloc] init];
endNode.pos.x = 113.940868;
endNode.pos.y = 22.54647;
endNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:endNode];
2. 规划路线
[BNaviService_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:@{BNaviTripTypeKey:@(BN_NaviTypeReal)}];
3. 处理结果

当路线规划成功时,会触发- (void)routePlanDidFinished:(NSDictionary*)userInfo 回调,在该回调函数中,可以获取到路线得返回数据,也可以直接发起导航。

/**
* 算路成功回调
*
* @param userInfo 用户信息
*/
- (void)routePlanDidFinished:(NSDictionary*)userInfo {
//进入导航页面
}

上一篇

高级功能

下一篇

摩托车路线规划

本篇文章对您是否有帮助?