{"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":"

场景图

1.转向动作

如下图是当前路口的主动作图标及道路名称提示。

\"image.png\"

当前路口转向动作


2.近接动作

当两个导航动作间距离很近时,两个动作够成近接动作,TBT会在此场景创建近接动作播报,通过接近转向图标和接近播报的方式,用以提醒用户接下来的两个连续动作。

语音播报式样“[当前动作],然后 [近接距离] [近接动作] ”,如“右转,然后两百米左转”。

图标样式同当前路口的主动作样式。


没有近接动作的场景


\"image.png\"

有近接动作的场景

时序图

路口转向图标、近接动作转向图标的资源来源分为在线、离线两种:

关键参数

当前路口转向动作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};

在线请求AutoSDK下发图标资源

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};

箭头png图片转为透明的示例

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}}