{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508850957,"data":{"id":71714072,"title":"5.3.9 在线算路失败转离线","slug":"ecb7be","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

特别注意:对接了多屏一致性的项目,不可使用此功能,,强行开启是无效的。客户端需要自行实现在线算路失败转离线的功能,无法使用AutoSDK内聚的在线算路失败转离线,请严格按照文档时序进行实现:《算路一致性》


场景图

\"image.png\"


时序图

关键参数

com.autonavi.gbl.common.path.option.RouteOption

public class RouteOption {\n    ...\n    /**\n    * @brief        设置是否:在线算路失败后尝试转离线算路\n    * @param[in]    value 是否在线失败后尝试转离线算路。true:是 false:否。默认false。\n    * @note         thread main\n    */\n    public void setTrySwitchToLocal(boolean value);\n    ...\n}

如果当前算路,因为网络不佳的原因算路失败。SDK会在通知HMI OnNewRouteError之后,内部自动发起相同参数的离线算路请求,不需要HMI自己实现转离线功能。


com.autonavi.gbl.route.model.PathResultData

com.autonavi.gbl.route.model.Online2OfflineInfo

public class PathResultData {\n    ...\n    /**\n     * 在线失败转离线相关结果信息\n     */\n    public Online2OfflineInfo online2OfflineInfo;\n    ...\n}\n\npublic class Online2OfflineInfo {\n    public boolean isProducedByBLOnlineToOffline; //本次算路结果是否是BL组件内部在线请求失败转离线请求之后得到\n    public long lastRequestId; //上一次请求失败的requestId(不管是离线还是在线)\n    \n    public boolean isRetryingRequestByBL; //算路失败的情况下,BL组件内部是否重新发起离线算路。true 自动再次发起离线算路 false 算路结束,BL内部不会发起离线算路\n    public long curRequestId; //当前新发起的requestId\n}\n

PathResultData中新增的Online2OfflineInfo数据,是为了让HMI知道在线失败转离线的相关信息。

当网络不佳导致的算路失败onNewRouteError,Online2OfflineInfo.isRetryingRequestByBL和curRequestId,能够通知到HMI,这次算路失败回调之前,SDK内部是否已经重新发起了离线算路,如果发起了离线算路,离线算路请求的requestId是多少;

当转离线算路,离线算路最终成功回调离线算路的onNewRoute,Online2OfflineInfo.isProducedByBLOnlineToOffline为true,通知HMI本次的算路结果,是来自SDK内部自动转离线请求得到。Online2OfflineInfo.lastRequestId通知HMI本次的成功离线算路结果,对应的在线失败算路是哪一次。


核心接口

long com.autonavi.gbl.route.RouteService.requestRoute(RouteOption routeOption)
void com.autonavi.gbl.route.observer.IRouteResultObserver.onNewRoute(PathResultData pathResultData, ArrayList<PathInfo> pathInfoList, RouteLimitInfo routeLimitInfo)\nvoid com.autonavi.gbl.route.observer.IRouteResultObserver.onNewRouteError(PathResultData pathResultData, RouteLimitInfo routeLimitInfo)

说明:函数详情,请复制函数名称到在线API搜索

调用示例

RouteService mRouteService = (RouteService)ServiceMgr.getServiceMgrInstance().getBLService(SingleServiceID.RouteSingleServiceID);//取得算路服务(RouteService)\n...\nRouteOption routeOption = RouteOption.create();//生成算路条件(RouteOption)\n...\n// 行程点信息\nPOIInfo startInfo;\nPOIInfo endInfo;\npoiForRequest = POIForRequest.create();\npoiForRequest.addPoint(PointType.PointTypeStart, startInfo);//起点\npoiForRequest.addPoint(PointType.PointTypeEnd, endInfo);//终点\n// 获取最新的定位信息,重新更新以下算路信息\nLocInfo info;\npoiForRequest.setDirection(info.matchRoadCourse);\npoiForRequest.setReliability(info.courseAcc);\npoiForRequest.setAngleType(info.startDirType);\npoiForRequest.setAngleGps(info.gpsDir);\npoiForRequest.setAngleComp(info.compassDir);\npoiForRequest.setSpeed(info.speed);\npoiForRequest.setLinkType(info.matchInfo[0].linkType);\npoiForRequest.setFormWay(info.matchInfo[0].formway);\npoiForRequest.setSigType(info.startPosType);\npoiForRequest.setFittingDir(info.fittingCourse);\npoiForRequest.setMatchingDir(info.roadDir);\npoiForRequest.setFittingCredit(info.fittingCourseAcc);\npoiForRequest.setPrecision(info.posAcc);\n...\n\nrouteOption.setPOIForRequest(poiForRequest);//设置算路行程点\nrouteOption.setRouteStrategy(RouteStrategy.RequestRouteTypeBest);//速度优先(推荐道路)(在线无效,离线有效)\nrouteOption.setConstrainCode(RouteConstrainCode.RouteFreewayStrategy); //算路时考虑高速优先\nrouteOption.setRouteType(RouteType.RouteTypeCommon);//INIT\nrouteOption.setCalcRouteRespType(SplitRespType);//设置本次算路结果为分次应答类型\nrouteOption.setOddFunction(True, True); //开启ODD请求,开启ODD请求和一次算路结果合并\n\n// 开启在线算路失败转离线\nrouteOption.setTrySwitchToLocal(True);\n\n...\nmRouteService.requestRoute(routeOption);//算路请求






","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:03:09","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":122,"collectCount":0,"estimateDate":8,"docStatus":0,"permissions":true,"overView":false}}