路线选择-iOS 最后更新时间: 2020年12月15日
乘客端选择路线
注意:从司乘同显3.0.0版本开始,支持乘客端在 行程前 和 行程中 设定司机送乘客的路线,下面是具体的功能介绍。
1.司机端
司机端需要打开下面两个开关,乘客端才能正常路线选择:
// 开启多备选模式,行程中选路需要开启多备选路线支持
[_sctxDriverManager.driveManager setMultipleRouteNaviMode:YES];
2.乘客端
2.1.获取乘客端选择路线管理类需要通过_sctxPassengerManager.getPassengerSelectRouteManager; 获取 乘客端路线选择管理类;
//获取乘客端选择路线管理类
MAPassengerSelectRouteManager *optionalRouteManager = _sctxPassengerManager.getPassengerSelectRouteManager;
//设定选路界面对应的 AMapView 对象,主要是用来绘制对应的覆盖物(起终点、备选路线等)
optionalRouteManager.mapView = _mapView;
2.2.设置代理
//设置乘客端选择路线状态代理
optionalRouteManager.delegate = self;
//乘客端选路代理
@protocol MAPassengerSelectRouteManagerDelegate <NSObject>
@optional
/**
@brief 乘客端路线选择回调
@param manager 选路manager
@param routes 多路线
*/
- (void)passengerSelectRouteManger:(MAPassengerSelectRouteManager *)manager selectRouteFrom:(NSArray<MASCTXRoute*> *)routes;
/**
@brief 某条路线被选中回调
@param manager 选路manager
@param routeId 选中被高亮的路线
*/
- (void)passengerSelectRouteManger:(MAPassengerSelectRouteManager *)manager routeFocused:(NSString*)routeId;
/**
@brief 乘客端选择路线结果回调(包括行前和行中)
@param manager 选路manager
@param type 选路结果回调MASCTXSelectRouteResult
*/
- (void)passengerSelectRouteManger:(MAPassengerSelectRouteManager *)manager selectRouteRuseltType:(MASCTXSelectRouteType)type;
@end
选路回调代理状态类型MASCTXSelectRouteType:
typedef enum : NSUInteger {
MASCTXSelectRoutePassengerPullRoutesFailed = 3002, //乘客行前拉取路线失败
MASCTXSelectRoutePassengerSelectRouteSuccess = 3003, //乘客选择路线推送服务端成功
MASCTXSelectRoutePassengerSelectRouteFailed = 3004, //乘客选择路线推送服务端失败
MASCTXSelectRouteDriverChangeOnPreRouteSuccess = 3005, //司机切换乘客行前选择路线成功
MASCTXSelectRouteDriverChangeOnPreRouteFailed = 3006, //司机切换乘客行前选择路线失败
MASCTXSelectRouteDriverChangeOnBoardRouteSuccess = 3007, //司机切换乘客行中选择路线成功
MASCTXSelectRouteDriverChangeOnBoardRouteFailed = 3008, //司机切换乘客行中选择路线失败
MASCTXSelectRouteDriverYaw = 3009, //司机偏航
MASCTXSelectRouteExistViaPointChangeRouteFailed = 3010, //添加途经点导致司机切换选路失败
MASCTXSelectRoutePassengerRefreshSelectRouteNoUpdate = 3011, //乘客重算路径与当前一致,请稍后再试
MASCTXSelectRouteEndPointHasChangedChangeRouteFailed = 3012, //目的地已变更,导致司机切换选路失败
} MASCTXSelectRouteType;
2.3.开始选路行车前乘客端选路会实时规划上车点到下车点的路线供选择,选定后,司机端在切换到行程中会使用该路线进行导航;行程中乘客端选路会依赖司机端同步的多备选路线,切换实时生效;
//进入选路状态
[_optionalRouteManager enterChoosingRouteState];
2.4.选定路线 (注意:行程前选择路线后,目的地有变更或者新增途经点,选路均会失效)
//选定某条路线
[_optionalRouteManager selectedRouteFinished];
2.5.停止选路
//停止选路
[_optionalRouteManager quitChoosingRouteState];
运行效果
行程前选路
行程中选路
司机端路线选择
注意:司乘同显从2.3.1版本之后支持司机端路线切换,司机端在每次算路成功时,会回调2-3条路线信息供用户选择,具体实现如下
1、多路线回调代理方法
/**
@brief 多路线选择回调。算路成功,且导航返回多条路线时调用此方法。chooseResultCallback:路径选择完成的结果回调. 具体naviRoute信息在naviDriveManager中获取.
配合- (void)setSelectedRoute:(NSInteger)naviRouteID; 使用来选择路线。
@param manager MADriverRouteManager
@param naviDriveManager AMapNaviDriveManager
@param chooseResultCallback 选路完成的状态回调(需要在选路完成后调用)
*/
- (void)driverRouteManager:(MADriverRouteManager *)manager naviDriveManager:(AMapNaviDriveManager*)naviDriveManager chooseResultCallback:(void(^)(void))chooseResultCallback;