{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516338282,"data":{"id":71712062,"title":"5.4.3.5 引导路线光柱图","slug":"gdv1wy","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
光柱图能在导航中以颜色标注出前方路况,并随着车辆的行驶逐渐前进直至终点。设计简单明了,使用户对路况的显示一目了然。在线导航才有该功能。
AutoSDK提供光柱图相关的数据,绘制逻辑由客户端自行实现,类似于一个UI控件。这边对透出数据逻辑进行说明。
在导航/模拟导航时,根据所选择路线的路况和当前车位信息通过INaviObserver.onUpdateTMCLightBar透出给客户端。
// 路况条信息\ncom.autonavi.gbl.guide.model.LightBarInfo\n{\n\tpublic ArrayList<LightBarItem> itemList; \t// 光柱结构信息列表\n\tpublic long pathID;\t\t\t\t\t\t// 该路况条对应的路线ID\n}\n\n// 光柱结构信息\ncom.autonavi.gbl.common.path.drive.model.LightBarItem\n{\n public int status; // 交通状态 TrafficStatus\n public int length; // 光柱bar长度, 单位: 米\n public long timeOfSeconds; // 预计通过该拥堵段的总时长 单位秒\n ...//其它字段光柱图不需要使用\n}\n\n// 交通状态\ncom.autonavi.gbl.common.path.drive.model.TrafficStatus\n{\n public static final int TrafficStatusUnkonw = 0; \t// 未知状态\n public static final int TrafficStatusOpen = 1; \t\t// 畅通\n public static final int TrafficStatusSlow = 2;\t\t// 缓行\n public static final int TrafficStatusJam = 3;\t\t// 拥堵\n public static final int TrafficStatusCongested = 4;\t// 严重拥堵\n}
void com.autonavi.gbl.guide.observer.INaviObserver.onUpdateTMCLightBar(ArrayList<LightBarInfo> lightBarInfo, LightBarDetail lightBarDetail, long passedIdx,boolean dataStatus)
说明:函数详情,请复制函数名称到在线API搜索。
光柱图的更新,需要结合路线ID、路线总长度进行计算。绘制顺序按item从后往前绘制,具体见下面的示例代码。
INaviObserver naviObserver = new INaviObserver() {\n @Override\n public void onUpdateTMCLightBar(ArrayList<LightBarInfo> lightBarInfo, LightBarDetail lightBarDetail, long passedIdx, boolean dataStatus) {\n \t//获取当前设置的主路线的pathID;curSelectPathIndex是当前引导的主路线索引,naviPath是引导路线对象,这里略。\n PathInfo pathInfo = naviPath.getVecPaths().get(curSelectPathIndex);\n if (null == pathInfo || !pathInfo.isValid())\n {\n return\n }\n \n \tlong curPathId = pathInfo.getPathID();\n \t// 获取路线总长度\n \tlong allLength = pathInfo.getLength();\n \t// 查找属于当前pathid的ItemList\n \tArrayList<LightBarItem> curItemList = null;\n \tfor (int i = 0; i < lightBarInfo.size(); i++) {\n \t if (curPathId == lightBarInfo.get(i).pathID) {\n \t curItemList = lightBarInfo.get(i).itemList;\n \t break;\n \t }\n \t}\n \t\n /*\n // 计算需要绘制的item列表,根据item的交通状态和长度,在UI控件从上往下(UI控件上的位置)绘制彩色控件\n if (curItemList != null) {\n for (int i = curItemList.size() - 1; i >= passedIdx; i--) {\n // 计算该段item在UI中绘制的比例\n double pixLen = (double)curItemList.get(i).length / (double)allLength;\n int status = curItemList.get(i).status;\n // todo: HMI 根据 pixLen 和 status 在UI控件绘制\n }\n }\n */\n \n // 上述注释掉的代码,在<610版本需要HMI计算实现。\n // >=610版本,AutoSDK已经计算好,在回调入参LightBarDetail中,HMI直接获取调用即可。\n }\n}