{"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内聚的在线算路失败转离线,请严格按照文档时序进行实现:《算路一致性》
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);//算路请求