{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516339840,"data":{"id":71712107,"title":"5.4.3.7 引导路口转向箭头","slug":"bkr1hx","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
如下图是当前路口的主动作图标及道路名称提示。
当前路口转向动作
当两个导航动作间距离很近时,两个动作够成近接动作,TBT会在此场景创建近接动作播报,通过接近转向图标和接近播报的方式,用以提醒用户接下来的两个连续动作。
语音播报式样“[当前动作],然后 [近接距离] [近接动作] ”,如“右转,然后两百米左转”。
图标样式同当前路口的主动作样式。
没有近接动作的场景
有近接动作的场景
路口转向图标、近接动作转向图标的资源来源分为在线、离线两种:
当前路口转向动作ID,在模拟导航/导航引导默认会透出。
public class NaviParam extends BaseParam {\n ...\n public int naviInfoCnt = 1; //设置透出导航信息个数,默认1个当前导航段\n\t...\n}
NaviParam.naviInfoCnt = 1:默认,只给出当前导航段信息,大部分时候NaviInfo.nextCrossInfo.size()=0,只有当满足接近动作条件时(条件是AutoSDK内聚的),NaviInfo.nextCrossInfo才给出进接动作信息。
NaviParam.naviInfoCnt > 1:NaviInfo.nextCrossInfo给出的是当前导航段后的(naviInfoCnt - 1)个路口信息,其中也包含了进接动作信息。这时候因为下个路口nextCrossInfo都透出了,就无法区分是不是进接动作了。
因为有性能消耗,这个NaviParam.naviInfoCnt 值建议设置不超过2。
例如:NaviParam.naviInfoCnt = 3,则如果当前位置后还有大于3个导航段的话,NaviInfo.nextCrossInfo.size()始终等于2,即总共给出3个导航段信息:一个当前导航段,两个后续连续的导航段。当导航接近终点时,NaviInfo.nextCrossInfo.size()的个数就会发生递减的变化,因为已经没有那么多导航段信息可以透出了。
ManeuverIconNull = 0x00, //!< 无定义\nManeuverIconCar = 0x01, //!< 自车图标 (无在线图标)\nManeuverIconTurnLeft = 0x02, //!< 左转图标\nManeuverIconTurnRight = 0x03, //!< 右转图标\nManeuverIconSlightLeft = 0x04, //!< 左前方图标\nManeuverIconSlightRight = 0x05, //!< 右前方图标\nManeuverIconTurnHardLeft = 0x06, //!< 左后方图标\nManeuverIconTurnHardRight = 0x07, //!< 右后方图标\nManeuverIconUTurn = 0x08, //!< 左转掉头图标 (无在线图标)\nManeuverIconContinue = 0x09, //!< 直行图标\nManeuverIconWay = 0x0A, //!< 到达途经点图标 (无在线图标)\nManeuverIconEntryRing = 0x0B, //!< 进入环岛图标,右侧通行地区的逆时针环岛\nManeuverIconLeaveRing = 0x0C, //!< 驶出环岛图标,右侧通行地区的逆时针环岛\nManeuverIconSAPA = 0x0D, //!< 到达服务区图标 (无在线图标)\nManeuverIconTollGate = 0x0E, //!< 到达收费站图标 (无在线图标)\nManeuverIconDestination = 0x0F, //!< 到达目的地图标 (无在线图标)\nManeuverIconTunnel = 0x10, //!< 进入隧道图标 (无在线图标)\nManeuverIconEntryLeftRing = 0x11, //!< 进入环岛图标,左侧通行地区的顺时针环岛\nManeuverIconLeaveLeftRing = 0x12, //!< 驶出环岛图标,左侧通行地区的顺时针环岛\nManeuverIconUTurnRight = 0x13, //!< 右转掉头图标,左侧通行地区的掉头\nManeuverIconSpecialContinue = 0x14, //!< 顺行图标(和直行有区别,顺行图标带有虚线) (无在线图标)\nManeuverIconEntryRingLeft = 0x15, //!< 标准小环岛 绕环岛左转,右侧通行地区的逆时针环岛\nManeuverIconEntryRingRight = 0x16, //!< 标准小环岛 绕环岛右转,右侧通行地区的逆时针环岛\nManeuverIconEntryRingContinue = 0x17, //!< 标准小环岛 绕环岛直行,右侧通行地区的逆时针环岛\nManeuverIconEntryRingUTurn = 0x18, //!< 标准小环岛 绕环岛调头,右侧通行地区的逆时针环岛\nManeuverIconEntryLeftRingLeft = 0x19, //!< 标准小环岛 绕环岛左转,左侧通行地区的顺时针环岛\nManeuverIconEntryLeftRingRight = 0x1a, //!< 标准小环岛 绕环岛右转,左侧通行地区的顺时针环岛\nManeuverIconEntryLeftRingContinue = 0x1b, //!< 标准小环岛 绕环岛直行,左侧通行地区的顺时针环岛\nManeuverIconEntryLeftRingUTurn = 0x1c, //!< 标准小环岛 绕环岛调头,左侧通行地区的顺时针环岛\nManeuverIconWayChargeStation = 0x40, //!< 到达充电站图标 (无在线图标)\nManeuverIconCrossWalk = 0x1d, //!< 通过人行横道图标 (无在线图标)\nManeuverIconOverPass = 0x1e, //!< 通过过街天桥图标 (无在线图标)\nManeuverIconUnderground = 0x1f, //!< 通过地下通道图标 (无在线图标)\nManeuverIconSquare = 0x20, //!< 通过广场 (无在线图标)\nManeuverIconPark = 0x21, //!< 通过公园 (无在线图标)\nManeuverIconStaircase = 0x22, //!< 通过扶梯 (无在线图标)\nManeuverIconLift = 0x23, //!< 通过直梯 (无在线图标)\nManeuverIconCableway = 0x24, //!< 通过索道 (无在线图标)\nManeuverIconSkyChannel = 0x25, //!< 通过空中通道 (无在线图标)\nManeuverIconChannel = 0x26, //!< 通过通道 //建筑物穿越通道 (无在线图标)\nManeuverIconWalkRoad = 0x27, //!< 通过行人道路 (无在线图标)\nManeuverIconBoatLine = 0x28, //!< 通过游船路线 (无在线图标)\nManeuverIconSightseeingLine = 0x29, //!< 通过观光车路线 (无在线图标)\nManeuverIconSkidway = 0x2a, //!< 通过滑道 (无在线图标)\nManeuverIconLadder = 0x2b, //!< 通过阶梯 (无在线图标)\nManeuverIconSlope = 0x2c, //!< 通过斜坡 (无在线图标)\nManeuverIconBridge = 0x2d, //!< 通过桥 (无在线图标)\nManeuverIconFerry = 0x2e, //!< 通过轮渡 (无在线图标)\nManeuverIconSubway = 0x2f, //!< 通过地铁通道 (无在线图标)\nManeuverIconEnterBuilding = 0x30, //!< 进入建筑物 (无在线图标)\nManeuverIconLeaveBuilding = 0x31, //!< 离开建筑物 (无在线图标)\nManeuverIconByElevator = 0x32, //!< 电梯换层 (无在线图标)\nManeuverIconByStair = 0x33, //!< 楼梯换层 (无在线图标)\nManeuverIconByEscalator = 0x34, //!< 扶梯换层 (无在线图标)\nManeuverIconLowTrafficCross = 0x35, //!< 非导航段通过红绿灯路口 (无在线图标)\nManeuverIconLowCross = 0x36, //!< 非导航段通过普通路口 (无在线图标)
void com.autonavi.gbl.guide.observer.INaviObserver.onUpdateNaviInfo(ArrayList<NaviInfo> naviInfoList)
long com.autonavi.gbl.guide.GuideService.obtainManeuverIconData(ManeuverConfig config)
void com.autonavi.gbl.guide.observer.INaviObserver.onObtainManeuverIconData(ManeuverIconResponseData respData)
说明:函数详情,请复制函数名称到在线API搜索。
Param naviParam = new Param();\nnaviParam.type = Type.GuideParamNavi;\nnaviParam.navi.naviInfoCnt = 1; // 默认1,配置透出导航信息个数\nmGuideService.setParam(naviParam);
INaviObserver naviObserver = new INaviObserver() {\n\t@Override\n\tpublic void onUpdateNaviInfo(ArrayList<NaviInfo> arrayList) {\n // 当前标签板的内容\n NaviInfoPanel naviInfoPanel = arrayList.get(0).NaviInfoData.get(arrayList.get(0).NaviInfoFlag);\n // 当前路口转向ID\n int maneuverID = naviInfoPanel.maneuverID;\n \n\t\t// 下个路口信息\n\t\tif (arrayList.get(0).nextCrossInfo.size() > 0){\n\t\t\tCrossNaviInfo nextCrossInfo = arrayList.get(0).nextCrossInfo.get(0);\n\t\t\t// 下个动作ID(navi.naviInfoCnt == 1时,就是进接动作)\n\t\t\tint nextManeuverID = nextCrossInfo.maneuverID;\n\t\t\t// 当前车位所在导航段终点到segIdx终点的距离(单位米) : 即: 下个动作距离\n\t\t\tint curToSegmentDist = nextCrossInfo.curToSegmentDist;\n\t\t}\n\t\t// todo ...\n // HMI根据NaviInfo信息,绘制在UI上\n\t}\n ...\n};
INaviObserver naviObserver = new INaviObserver() {\n @Override\n public void onUpdateNaviInfo(ArrayList<NaviInfo> arrayList) {\n // 当前标签板的内容\n NaviInfoPanel naviInfoPanel = arrayList.get(0).NaviInfoData.get(arrayList.get(0).NaviInfoFlag);\n // 转向ID\n int maneuverID = naviInfoPanel.maneuverID;\n if (maneuverID > 0) {\n \t// 异步请求在线图片\n ManeuverConfig config;\n //config.deviceId obtainManeuverIconData 接口不用传deviceId字段。\n \tconfig.width = 100;\n \tconfig.height = 100;\n \tconfig.backColor = 0xffffffff;\n \tconfig.roadColor = 0xffff0000;\n \tconfig.arrowColor = 0xff00ff00;\n \tconfig.pathID = arrayList.get(0).pathID;\n \tconfig.segmentIdx = arrayList.get(0).curSegIdx;\n \tconfig.maneuverID = maneuverID;\n \n\t\t\t//发起请求\n \tmGuideService.obtainManeuverIconData(config);\n }\n }\n \n @Override\n public void onObtainManeuverIconData(ManeuverIconResponseData respData) {\n if (respData != null && respData.data != null && respData.data.length > 0) {\n // 返回的数据\n // info.pData -> bmp图片二进制流\n // todo: HMI绘制代码\n } \n else {\n // 没有在线图标,使用离线图标进行绘制\n // todo: HMI绘制代码\n }\n }\n ...\n};
import android.graphics.Bitmap;\n\npublic static int[] byte2int(byte[] res) {\n if (res == null || (res.length - 54) % 4 != 0 || res.length == 0) {\n return null;\n }\n int[] targets = new int[(res.length - 54) / 4];\n for (int i = 0; i < targets.length; i++) {\n targets[i] = (res[54 + 4 * i + 0] & 0xff) | ((res[54 + 4 * i + 1] << 8) & 0xff00) | ((res[54 + 4 * i + 2] << 24) >>> 8) | (res[54 + 4 * i + 3] << 24);\n }\n return targets;\n}\n// 转换原始的图片\nint[] colors = byte2int(res);\nif (colors != null && colors.length > 0) {\n roadSignBmp = Bitmap.createBitmap(colors, width, height, Bitmap.Config.ARGB_4444);\n}
","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:03:19","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":287,"collectCount":0,"estimateDate":17,"docStatus":0,"permissions":true,"overView":false}}