独立路径规划 最后更新时间: 2021年01月22日
基本介绍
独立路径规划是指路径规划的结果不会自动应用于当前导航,需要手动调用API传入路径规划结果来开始导航。可用于不干扰本次导航的单独路径规划场景,比如路线预览等。适用于驾车/货车路径规划、步行路径规划、骑行路径规划。支持以下几种功能的路径规划功能:
- 无起点路径规划:路径规划时,起点坐标传空
- 经纬度路径规划:路径规划时,起终点AMapNaviPOIInfo只传经纬度
- POI路径规划:路径规划时,可传入POIID,提高规划的准确性
1.独立路径规划功能
要实现独立路径规划功能,需要了解以下几个接口:
- 驾车/货车独立路径规划接口
/**
* @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.7.0
* @param startPOIInfo 起点POIInfo,参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点.
* @param endPOIInfo 终点POIInfo,参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空
* @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空
* @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费)
* @callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState.
* @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否
*/
- (BOOL)independentCalculateDriveRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo
endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo
wayPOIInfos:(nullable NSArray<AMapNaviPOIInfo *> *)wayPOIInfos
drivingStrategy:(AMapNaviDrivingStrategy)strategy
callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback;
- 驾车独立路径规划示例
AMapNaviPoint *startPoint = [AMapNaviPoint locationWithLatitude:39.993306 longitude:116.473004];
AMapNaviPoint *endPoint = [AMapNaviPoint locationWithLatitude:39.976941 longitude:116.463375];
AMapNaviPOIInfo *startPOI = [[AMapNaviPOIInfo alloc] init];
// POI的id
startPOI.mid = @"";
// POI的坐标点
startPOI.locPoint = startPoint;
// 车头方向角度, 默认为-1, 0为正北, 顺时针方向增加. 注意:mid == nil && locPoint != nil && startAngle >=0 才起作用
startPOI.startAngle = 0;
AMapNaviPOIInfo *endPOI = [[AMapNaviPOIInfo alloc] init];
// POI的id
endPOI.mid = @"B000A81FY5";
// POI的坐标点
endPOI.locPoint = endPoint;
// 车头方向角度, 默认为-1, 0为正北, 顺时针方向增加. 注意:mid == nil && locPoint != nil && startAngle >=0 才起作用
endPOI.startAngle = 0;
// 1. 起点坐标为空:则为无起点路径规划
// 2. 起终点只传经纬度为经纬度路径规划
// 3. 起终点只传POIID为POIID路径规划
// 4. 起终点传startAngle、locPoint、mid 则为起点角度路径规划
[[AMapNaviDriveManager sharedInstance] independentCalculateDriveRouteWithStartPOIInfo:nil endPOIInfo:endPOI wayPOIInfos:nil drivingStrategy:AMapNaviDrivingStrategyMultipleAvoidCost callback:^(AMapNaviRouteGroup * _Nonnull routeGroup, NSError * _Nonnull error) {
NSLog(@"group = %@, error = %@",routeGroup,error);
}];
- 步行独立路径规划接口
/**
* @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.8.0
* @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点
* @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空
* @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy.
* @callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState.
* @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否
*/
- (BOOL)independentCalculateWalkRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo
endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo
strategy:(AMapNaviTravelStrategy)strategy
callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback;
- 骑行独立路径规划接口
/**
* @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.7.0
* @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点
* @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空
* @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy.
* @callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState.
* @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否
*/
- (BOOL)independentCalculateRideRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo
endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo
strategy:(AMapNaviTravelStrategy)strategy
callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback;
2.导航
独立路径规划的路线结果可以用于路线预览,也可以用于直接导航;用于直接导航时,也支持行前选路
接口如下:
//开始GPS导航
[[AMapNaviDriveManager sharedInstance] startGPSNavi:independentRouteGroup];
//开始模拟导航
[[AMapNaviDriveManager sharedInstance] startEmulatorNavi:independentRouteGroup];
- 使用驾车独立路径规划开始导航示例
[[AMapNaviDriveManager sharedInstance] independentCalculateDriveRouteWithStartPOIInfo:nil endPOIInfo:endPOI wayPOIInfos:nil drivingStrategy:AMapNaviDrivingStrategyMultipleAvoidCost callback:^(AMapNaviRouteGroup * _Nonnull routeGroup, NSError * _Nonnull error) {
// 1.获取独立算路的结果
AMapNaviRouteGroup *independentRouteGroup = routeGroup;
NSNumber *lastRouteIDs = [independentRouteGroup.naviRouteIDs lastObject];
// 2.行前选路
[independentRouteGroup selectNaviRouteWithRouteID:[lastRouteIDs integerValue]];
// 3.使用独立路径规划的路线,开始导航
[[AMapNaviDriveManager sharedInstance] startGPSNavi:independentRouteGroup];
}];