{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671518028846,"data":{"id":71712025,"title":"5.3.5 路线数据访问","slug":"vab914","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
从路线结果页可进入路线详情页展示:
com.autonavi.gbl.common.path.option.PathInfo
long com.autonavi.gbl.common.path.option.PathInfo.getGroupSegmentCount()
GroupSegment com.autonavi.gbl.common.option.PathInfo.getGroupSegment(long index)
long com.autonavi.gbl.common.path.option.PathInfo.getSegmentCount()
SegmentInfo com.autonavi.gbl.common.path.option.PathInfo.getSegmentInfo(long index)
long com.autonavi.gbl.common.path.option.SegmentInfo.getLinkCount()
LinkInfo com.autonavi.gbl.common.path.option.SegmentInfo.getLinkInfo(long index)
String com.autonavi.gbl.common.path.option.PathInfo.getNaviID()
等等诸多核心接口能力不再逐一列举,请参考在线API。
注:其中提供上述各个接口的类间的信息包含关系参照下图
如下列表,如果是应用层主动调用create方法创建对象的,需要应用层在使用后调用调用destroy进行释放。
com.autonavi.gbl.common.path.drive.model.POIForRequest.create()\ncom.autonavi.gbl.common.path.option.RouteOption.create()\ncom.autonavi.gbl.route.model.impl.IRouteRestorationOptionImpl.create()\ncom.autonavi.gbl.route.model.RouteAosOption.create()\n
调用示例:
RouteOption routeOption = RouteOption.create();// 根据业务需要创建对象\n// routeOption.*** to do something\nRouteOption.destroy(routeOption); // 主动释放创建的对象\n\nPOIForRequest poiForRequest = POIForRequest.create();// 根据业务需要创建对象\n//poiForRequest.**** //to do something\nPOIForRequest.destroy(poiForRequest); // 主动释放创建的对象
SDK一部回调的ArrayList<PathInfo> pathInfoList 需要构造拷贝一份,
转线程后,客户段缓存起来
// 算路结果观察者\nIRouteResultObserver routeResultObserver = new IRouteResultObserver() {\n @Override\n public void onNewRoute(PathResultData pathResultData, ArrayList<PathInfo> pathInfoList, RouteLimitInfo routeLimitInfo) {\n \n /* 转线程前,这边需要特殊处理。对SDK回调回来的PathInfo对象需重新构造创建一遍 */\n ArrayList<PathInfo> paths = new ArrayList<>();\n for(int i=0;i<pathInfoList.size();i++){\n PathInfo paths =new PathInfo(pathInfoList.get(i));\n paths.add(pathInfo);\n }\n // 根据情况决定是否将后续处理流程转为其他线程处理,如果转线程,只需将下面示例中的HandleNewRoute函数放在指定线程执行即可\n HandleNewRoute(pathResultData, paths);\n }\n\n @Override\n public void onNewRouteError(PathResultData pathResultData, RouteLimitInfo routeLimitInfo) {\n if (pathResultData.type == RouteTypeMutiRouteRequest && pathResultData.errorCode == RouteErrorcodeUnkonw)\n {\n // 备选路重算 失败错误码13 不处理\n }\n else \n {\n // 其它对应的处理逻辑\n }\n }\n};\n\n/* UI 线程逻辑 */\nvoid HandleNewRoute(PathResultData pathResultData, ArrayList<PathInfo> paths)\n{\n PathsMgr.getInstance().setPathsCache(paths);\n \n // 获取路线条数\n long size = paths.size();\n \n for(int i=0; i < size; i++)\n {\n \tPathInfo pathInfo = paths.get(i);\n \tif (null != pathInfo && pathInfo.isValid())\n \t{\n\t\t\t// 获取路线长度,单位:米\n\t\t\tlong len = pathInfo.getLength();\n\t\t\t\n\t\t\t// 获取驾驶路线数上的电动车路线信息\n\t\t\tElecPathInfo elecPathInfo = pathInfo.getElecPathInfo();\n\t\t\t// 获取驾驶路线数上的交通事件信息\n\t\t\tTrafficIncident trafficIncident = pathInfo.getTrafficIncident((short)0,false);\n\t\t\t// 驾驶路线数上的限行信息\n\t\t\tRestrictionInfo restrictionInfo = pathInfo.getRestrictionInfo();\n\t\t\t// 驾驶路线数上拥堵段信息\n\t\t\tArrayList<JamSegment> vJamSegment = pathInfo.getJamSegment();\n\t\t\t// 驾驶路线数上已躲避掉的拥堵段信息\n\t\t\tAvoidTrafficJamInfo avoidTrafficJam = pathInfo.getAvoidTrafficJam((short)0);\n \t\t\t\n \t\t\t\n \t\t\t// 获取聚合段\n \t\t\tint groupSegCount = pathInfo.getGroupSegmentCount();\n \t\t\tfor (int j = 0; j < groupSegCount; j++)\n \t\t\t{\n \t\t\t\t// 聚合段包含了多个导航段的索引\n \t\t\t\tGroupSegment gropSegment = pathInfo.getGroupSegment(j);\n \t\t\t}\n \t\t\t\n \t\t\t// 获取导航段信息\n \t\t\tint segInfoCount = pathInfo.getSegmentCount();\n \t\t\tfor(int j = 0; j < segInfoCount; j++)\n \t\t\t{\n \t\t\t\tSegmentInfo segmentInfo = pathInfo.getSegmentInfo(j);\n \t\t\t\tif (null != segmentInfo && segmentInfo.isValid())\n \t\t\t\t{\n \t\t\t\t\t// 获取导航段长度\n \t\t\t\t\tlong segLen = segmentInfo.getLength();\n \t\t\t\t\t// ... 获取其他信息\n \t\t\t\t\t\n \t\t\t\t\t// 获取link段信息\n \t\t\t\t\tint linkCount = segmentInfo.getLinkCount();\n \t\t\t\t\tfor(int z = 0; z < linkCount;z++)\n \t\t\t\t\t{ \n \t\t\t\t\t\tLinkInfo linkInfo = segmentInfo.getLinkInfo(z);\n \t\t\t\t\t\tif (null != linkInfo && linkInfo.isValid())\n \t\t\t\t\t\t{\n \t\t\t\t\t\t\t //获取link长度\n \t\t\t\t\t\t\t long linkLen = linkInfo.getLength();\n \t\t\t\t\t\t\t //... 获取其他信息\n \t\t\t\t\t\t\t \n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\t\n \t\t\t\t}\n \t\t}\n \t}\n }\n \n // 若之后业务还需使用路线 通过getPathsCache获取\n // 若不在需当前路线时回收路线 destoryPathsCache() \n}\n\npublic class PathsMgr {\n public static final String TAG = "PathsMgr";\n private ArrayList<PathInfo> mPathsCache;\n \n private static class SinglonHolder {\n private static PathsMgr instance = new PathsMgr();\n }\n\n public static PathsMgr getInstance() {\n return SinglonHolder.instance;\n }\n\n // 在UI线程缓存路线结果\n public void setPathsCache(ArrayList<PathInfo> paths) {\n // 清除上一次老路线缓存\n destoryPathsCache()\n //无效的结果不需要cache\n if (paths == null || paths.size() <= 0) {\n return;\n }\n mPathsCache = paths;\n Logger.d(TAG,"setPathsCache:paths = {?}",paths.toString());\n }\n \n // 在UI线程获取路线缓存结果\n public ArrayList<PathInfo> getPathsCache() {\n Logger.d(TAG,"getPathsCache:paths = {?}",mPathsCache.toString());\n return mPathsCache;\n }\n\n // 不再使用当前路线时在UI线程调用,如退出路线规划页,结束真实导航\n public void destoryPathsCache() {\n if (mPathsCache == null || mPathsCache.size() <= 0) {\n return;\n }\n Iterator<PathInfo> it = mPathsCache.iterator();\n while(it.hasNext()){\n PathInfo pathInfo = it.next();\n it.remove();\n }\n }\n}