为了更好的体验,请使用 Chrome 浏览器。
X
车联网开放平台地图 API导航信息透出(ADASISv3)

导航信息透出(ADASISv3)

机动点#

导航机动点信息指的是根据用户当前GPS定位点生成的引导用户到下一驾驶操作点的信息,如下图所示:

机动点

关键代码#

    @Override
    public void onManeuver(BNRGManeuver arg0) {
        Log.d(BNRemoteConstants.MODULE_TAG, "onManeuver...........name = " + arg0.getManeuverName() + ", distance = " +
                arg0.getManeuverDistance() + ",nextRoadName = " + arg0.getNextRoadName());
 
        final String afterMeterS = getFormatAfterMeters(arg0.getManeuverDistance());
        final String nextRoadName = arg0.getNextRoadName();
        final boolean isAlong = arg0.mIsStraight;
        String turnName = arg0.name;
        int turnIconResId = SimpleGuideModle.gTurnIconID[0];
 
        if (turnName != null && !"".equalsIgnoreCase(turnName)) {
            turnName = turnName + ".png";
        }
 
        if (turnName != null && !"".equalsIgnoreCase(turnName)) {
            turnIconResId = SimpleGuideModle.getInstance().getTurnIconResId(turnName);
        }
 
        final int turnIcon = turnIconResId;
 
        mMainHandler.post(new Runnable() {
 

            @Override
            public void run() {
                mAfterMetersInfoTV.setText(afterMeterS);
                mGoWhereInfoTV.setText(nextRoadName);
 
                mNaviAfterView.setVisibility(View.VISIBLE);
                mAlongRoadView.setVisibility(View.GONE);
                mTurnIcon.setImageDrawable(getResources().getDrawable(turnIcon));
            }
        });
    }
 

    /**
     * 根据剩余距离获取格式化的字符串,如  200米后
     *
     * @param nextRemainDist
     * @return
     */
    private String getFormatAfterMeters(int nextRemainDist) {
        StringBuffer distance = new StringBuffer();
        StringUtils.formatDistance(nextRemainDist, UnitLangEnum.ZH, distance);
        return getResources().getString(R.string.nsdk_string_rg_sg_after_meters, distance);
    }
 
    /**
     * 定义了机动点转向标的对应关系,如 turnIconName 为 turn_back 时,对应显示图标ID为 R.drawable.nsdk_drawable_rg_ic_turn_back,具体图标请用户自行设计。
     */
    public static final int[] gTurnIconID = {
            R.drawable.nsdk_drawable_rg_ic_turn_back,          /**<  无效值 */
            R.drawable.nsdk_drawable_rg_ic_turn_front,          /**<  直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_front,  /**<  右前方转弯 */
            R.drawable.nsdk_drawable_rg_ic_turn_right,          /**<  右转 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_back,      /**<  右后方转弯 */
            R.drawable.nsdk_drawable_rg_ic_turn_back,  /**<  掉头 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_back,      /**<  左后方转弯 */
            R.drawable.nsdk_drawable_rg_ic_turn_left,  /**<  左转 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_front,      /**<  左前方转弯 */
            R.drawable.nsdk_drawable_rg_ic_turn_ring,  /**<  环岛 */
            R.drawable.nsdk_drawable_rg_ic_turn_ring_out,      /**<  环岛出口 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side,      /**<  普通/JCT/SAPA二分歧 靠左 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_side,      /**<  普通/JCT/SAPA二分歧 靠右 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side_main,          /**<  左侧走本线 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**<  靠最左走本线 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_side_main,      /**<  右侧走本线 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight, /**<  靠最右走本线 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,        /**<  中间走本线 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side_ic,  /**<  IC二分歧左侧走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_right_side_ic,          /**<  IC二分歧右侧走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left,  /**<  普通三分歧/JCT/SAPA 靠最左 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right,  /**<  普通三分歧/JCT/SAPA 靠最右 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,          /**<  普通三分歧/JCT/SAPA 靠中间 */
            R.drawable.nsdk_drawable_rg_ic_turn_start,          /**<  起始地 */
            R.drawable.nsdk_drawable_rg_ic_turn_dest,          /**<  目的地 */
            R.drawable.nsdk_drawable_rg_ic_turn_via_1,          /**<  途径点1 */
            R.drawable.nsdk_drawable_rg_ic_turn_via_1,          /**<  途径点2 */
            R.drawable.nsdk_drawable_rg_ic_turn_via_1,          /**<  途径点3 */
            R.drawable.nsdk_drawable_rg_ic_turn_via_1,          /**<  途径点4 */
            R.drawable.nsdk_drawable_rg_ic_turn_inferry,      /**<  进入渡口 */
            R.drawable.nsdk_drawable_rg_ic_turn_inferry,      /**<  脱出渡口 */
            R.drawable.nsdk_drawable_rg_ic_turn_tollgate,             /**<  收费站 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side_main,       /**<  IC二分歧左侧直行走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_right_side_main,      /**<  IC二分歧右侧直行走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side_main,       /**<  普通/JCT/SAPA二分歧左侧 直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_side_main,      /**<  普通/JCT/SAPA二分歧右侧 直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**<  普通/JCT/SAPA三分歧左侧 直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,        /**<  普通/JCT/SAPA三分歧中央 直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight,/**<  普通/JCT/SAPA三分歧右侧 直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left,          /**<  IC三分歧左侧走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,        /**<  IC三分歧中央走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right,         /**<  IC三分歧右侧走IC */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**<  IC三分歧左侧直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,          /**<  IC三分歧中间直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight,   /**<  IC三分歧右侧直行 */
            R.drawable.nsdk_drawable_rg_ic_turn_left_side_main,  /**<  八方向靠左直行*/
            R.drawable.nsdk_drawable_rg_ic_turn_right_side_main,  /**<  八方向靠右直行*/
            R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**<  八方向靠最左侧直行*/
            R.drawable.nsdk_drawable_rg_ic_turn_branch_center,  /**<  八方向沿中间直行*/
            R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight,  /**<  八方向靠最右侧直行*/
            R.drawable.nsdk_drawable_rg_ic_turn_left_2branch_left,  /**<  八方向左转+随后靠左*/
            R.drawable.nsdk_drawable_rg_ic_turn_left_2branch_right,  /**<  八方向左转+随后靠右*/
            R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_left,  /**<  八方向左转+随后靠最左*/
            R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_middle,/**<  八方向左转+随后沿中间*/
            R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_right,  /**<  八方向左转+随后靠最右*/
            R.drawable.nsdk_drawable_rg_ic_turn_right_2branch_left, /**<  八方向右转+随后靠左 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_2branch_right,  /**<  八方向右转+随后靠右*/
            R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_left, /**<  八方向右转+随后靠最左*/
            R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_middle, /**<  八方向右转+随后沿中间 */
            R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_right,  /**<  八方向右转+随后靠最右*/
            R.drawable.nsdk_drawable_rg_ic_turn_lf_2branch_left,    /**<  八方向左前方靠左侧 */
            R.drawable.nsdk_drawable_rg_ic_turn_lf_2branch_right,    /**<  八方向左前方靠右侧 */
            R.drawable.nsdk_drawable_rg_ic_turn_rf_2branch_left,     /**<  八方向右前方靠左侧 */
            R.drawable.nsdk_drawable_rg_ic_turn_rf_2branch_right     /**<  八方向右前方靠右侧 */
    };
 

    /**
     * 车道图标,对应每一个车道的转向箭头图标,用户可自行设计对应的显示图标。
     */
    public class NaviLane {
        /**
         * 左转(高亮)
         */
        public static final int NAVILANE_TURN_LEFT_90 = 0x11000000;
        /**
         * 左转
         */
        public static final int NAVILANE_TURN_LEFT_90_GRAY = 0x10000000;
        /**
         * 右转(高亮)
         */
        public static final int NAVILANE_TURN_RIGHT_90 = 0x00110000;
        /**
         * 右转
         */
        public static final int NAVILANE_TURN_RIGHT_90_GRAY = 0x00100000;
        /**
         * 直行(高亮)
         */
        public static final int NAVILANE_STRAIGHT = 0x00001100;
        /**
         * 直行
         */
        public static final int NAVILANE_STRAIGHT_GRAY = 0x00001000;
        /**
         * 左调头(高亮)
         */
        public static final int NAVILANE_TURN_AROUND_LEFT = 0x00000011;
        /**
         * 左调头
         */
        public static final int NAVILANE_TURN_AROUND_LEFT_GRAY = 0x00000010;
        /**
         * 左转+直行
         */
        public static final int NAVILANE_2CROSS_LEFT_STRAIGHT_GRAY = 0x10001000;
        /**
         * 左转(高亮)+直行
         */
        public static final int NAVILANE_2CROSS_TURN_LEFT = 0x11001000;
        /**
         * 左转+直行(高亮)
         */
        public static final int NAVILANE_2CROSS_LEFT_STRAIGHT = 0x10001100;
        /**
         * 右转+直行
         */
        public static final int NAVILANE_2CROSS_RIGHT_STRAIGHT_GRAY = 0x00101000;
        /**
         * 右转(高亮)+直行
         */
        public static final int NAVILANE_2CROSS_TURN_RIGHT = 0x00111000;
        /**
         * 右转+直行(高亮)
         */
        public static final int NAVILANE_2CROSS_RIGHT_STRAIGHT = 0x00101100;
        /**
         * 左转+直行+右转
         */
        public static final int NAVILANE_3CROSS_GRAY = 0x10101000;
        /**
         * 左转(高亮)+直行+右转
         */
        public static final int NAVILANE_3CROSS_TURN_LEFT = 0x11101000;
        /**
         * 左转+直行+右转(高亮)
         */
        public static final int NAVILANE_3CROSS_TURN_RIGHT = 0x10111000;
        /**
         * 左转+直行(高亮)+右转
         */
        public static final int NAVILANE_3CROSS_STRAIGHT = 0x10101100;
        /**
         * 左转+左调头
         */
        public static final int NAVILANE_AROUND_AND_LEFT_GRAY = 0x10000010;
        /**
         * 左转(高亮)+左调头
         */
        public static final int NAVILANE_LEFT_AND_AROUND = 0x11000010;
        /**
         * 左转+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_AND_LEFT = 0x10000011;
        /**
         * 左转+右转
         */
        public static final int NAVILANE_LEFT_AND_RIGHT_GRAY = 0x10100000;
        /**
         * 左转(高亮)+右转
         */
        public static final int NAVILANE_LEFT_AND_RIGHT = 0x11100000;
        /**
         * 左转+右转(高亮)
         */
        public static final int NAVILANE_RIGHT_AND_LEFT = 0x10110000;
        /**
         * 右转+左调头
         */
        public static final int NAVILANE_AROUND_AND_RIGHT_GRAY = 0x00100010;
        /**
         * 右转(高亮)+左调头
         */
        public static final int NAVILANE_RIGHT_AND_AROUND = 0x00110010;
        /**
         * 右转+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_AND_RIGHT = 0x00100011;
        /**
         * 直行+左调头
         */
        public static final int NAVILANE_AROUND_AND_STRAIGHT_GRAY = 0x00001010;
        /**
         * 直行(高亮)+左调头
         */
        public static final int NAVILANE_STRAIGHT_AND_AROUND = 0x00001110;
        /**
         * 直行+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_AND_STRAIGHT = 0x00001011;
        /**
         * 左转+右转+左调头
         */
        public static final int NAVILANE_AROUND_LEFT_RIGHT_GRAY = 0x10100010;
        /**
         * 左转(高亮)+右转+左调头
         */
        public static final int NAVILANE_LEFT_AROUND_RIGHT = 0x11100010;
        /**
         * 左转+右转(高亮)+左调头
         */
        public static final int NAVILANE_RIGHT_AROUND_LEFT = 0x10110010;
        /**
         * 左转+右转+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_LEFT_RIGHT = 0x10100011;
        /**
         * 左转+直行+左调头
         */
        public static final int NAVILANE_AROUND_LEFT_STRAIGHT_GRAY = 0x10001010;
        /**
         * 左转(高亮)+直行+左调头
         */
        public static final int NAVILANE_LEFT_AROUND_STRAIGHT = 0x11001010;
        /**
         * 左转+直行(高亮)+左调头
         */
        public static final int NAVILANE_STRAIGHT_LEFT_AROUND = 0x10001110;
        /**
         * 左转+直行+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_LEFT_STRAIGHT = 0x10001011;
        /**
         * 右转+直行+左调头
         */
        public static final int NAVILANE_AROUND_RIGHT_STRAIGHT_GRAY = 0x00101010;
        /**
         * 右转(高亮)+直行+左调头
         */
        public static final int NAVILANE_RIGHT_AROUND_STRAIGHT = 0x00111010;
        /**
         * 右转+直行(高亮)+左调头
         */
        public static final int NAVILANE_STRAIGHT_RIGHT_AROUND = 0x00101110;
        /**
         * 右转+直行+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_RIGHT_STRAIGHT = 0x00101011;
        /**
         * 左转+右转+直行+左调头
         */
        public static final int NAVILANE_AROUND_LEFT_RIGHT_STRAIGHT_GRAY = 0x10101010;
        /**
         * 左转(高亮)+右转+直行+左调头
         */
        public static final int NAVILANE_LEFT_AROUND_RIGHT_STRAIGHT = 0x11101010;
        /**
         * 左转+右转(高亮)+直行+左调头
         */
        public static final int NAVILANE_RIGHT_AROUND_LEFT_STRAIGHT = 0x10111010;
        /**
         * 左转+右转+直行(高亮)+左调头
         */
        public static final int NAVILANE_STRAIGHT_AROUND_LEFT_RIGHT = 0x10101110;
        /**
         * 左转+右转+直行+左调头(高亮)
         */
        public static final int NAVILANE_AROUND_LEFT_RIGHT_STRAIGHT = 0x10101011;
    }

机动点图标在百度导航 app 里如下图所示,用户可以根据范例自行设计图标

机动点图标

服务区#

当用户行驶到高速路段,导航展示的告诉服务区及距离服务区距离等信息,如下图所示:

服务区

关键代码#

@Override
public void onServiceArea(BNRGServiceArea arg0) {
	Log.d(BNRemoteConstants.MODULE_TAG, "onServiceArea............name = " + arg0.getServiceAreaName() + ", distance = " + arg0.getServiceAreaDistance());
 
	final String serviceAreaTips = getFormatAfterMeters(arg0.getServiceAreaDistance()) + " " + arg0.getServiceAreaName();
	mMainHandler.post(new Runnable() {
 
		@Override
		public void run() {
			mNavilogTv.setText(serviceAreaTips);
		}
	});
}

诱导辅助#

辅助诱导信息为导航或者电子狗诱导过程中的路面状况、测速摄像头等交通道路信息。在导航中通常在如下区域展示:

服务区

关键代码#

在导航辅助诱导数据中,assistantType 参数代表的辅助诱导类型,请根据实际需要对应自定义的诱导图标。

@Override
public void onAssistant(BNRGAssistant arg0) {
	Log.d(BNRemoteConstants.MODULE_TAG, "onAssistant......distance = " + arg0.getAssistantDistance() + ", type = " + arg0.getAssistantType());
 
	String assistantTips = "";
	String assistantTypeS = "合流";
	if (arg0.getAssistantDistance() > 0) {			
		switch (arg0.getAssistantType()) {
			case HUDConstants.AssistantType.JOINT:
				assistantTypeS = "合流";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.TUNNEL:
				assistantTypeS = "隧道";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.BRIDGE:
				assistantTypeS = "桥梁";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.RAILWAY:
				assistantTypeS = "铁路";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.BLIND_BEND:
				assistantTypeS = "急转弯";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.BLIND_SLOPE:
				assistantTypeS = "陡坡";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.ROCKFALL:
				assistantTypeS = "落石";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.ACCIDENT:
				assistantTypeS = "事故多发区";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.SPEED_CAMERA:
				assistantTypeS = "测速摄像";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS + "限速: " + arg0.getAssistantLimitedSpeed();
				break;
			case HUDConstants.AssistantType.TRAFFIC_LIGHT_CAMERA:
				assistantTypeS = "交通信号灯摄像";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.INTERVAL_CAMERA:
				assistantTypeS = "区间测速";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.CHILDREN:
				assistantTypeS = "注意儿童";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.UNEVEN:
				assistantTypeS = "路面不平";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.NARROW:
				assistantTypeS = "道路变窄";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.VILLAGE:
				assistantTypeS = "前面村庄";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.SLIP:
				assistantTypeS = "路面易滑";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.OVER_TAKE_FORBIDEN:
				assistantTypeS = "禁止超车";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			case HUDConstants.AssistantType.HONK:
				assistantTypeS = "请铭喇叭";
				assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
				break;
			default:
				break;
			}
	}
 
	final String assistantTipstr = assistantTips;
	mMainHandler.post(new Runnable() {
 
		@Override
		public void run() {
			mNavilogTv.setText(assistantTipstr);
		}
	});
}
 
/**
 * 导航诱导图标类型
 */
public static class AssistantType {
	/**  合流 */
	public final static int Joint  = 0 ;
	/**  隧道 */
	public final static int Tunnel = 1 ;
	/**  桥梁 */
	public final static int Bridge = 2 ;
	/**  铁道 */
	public final static int Railway = 3 ;
	/**  急转弯 */
	public final static int BlindBend = 4 ;
	/**  陡坡 */
	public final static int BlindSlope = 5 ;
	/**  落石区 */
	public final static int Rockfall = 6 ;
	/**  事故多发区 */
	public final static int Accident = 7 ;
	/**  测速摄像头 */
	public final static int SpeedCamera = 8 ;
	/**  交通信号灯摄像头 */
	public final static int TrafficLightCamera = 9 ;
	/**  违章摄像头 */
	public final static int PeccanryCamera = 10 ;
	/**  区间测速摄像头 */
	public final static int IntervalCamera = 11 ;
	/**  注意儿童 */
	public final static int Children = 12 ;
	/**  路面不平 */
	public final static int Uneven = 13 ;
	/**  道路变窄 */
	public final static int Narrow = 14 ;
	/**  前面村庄 */
	public final static int Viliage = 15 ;
	/**  路面易滑 */
	public final static int Slip = 16 ;
	/**  禁止超车 */
	public final static int OverTakeForbidden= 17 ;
	/**  请鸣喇叭 */
	public final static int Honk = 18 ;
}

目的地剩余信息#

本次导航当前位置距离目的地剩下的距离及时间信息,如下图所示:

目的地剩余信息

关键点#

@Override
public void onRemainInfo(BNRGRemainInfo arg0) {
	Log.d(BNRemoteConstants.MODULE_TAG, "onRemainInfo.............distance = " + arg0.getRemainDistance() + ", time = " + arg0.getRemainTime());
 
	final String remainDistance = calculateTotalRemainDistString(arg0.getRemainDistance());
	final String remainTime = calculateArriveTime(arg0.getRemainTime());
	mMainHandler.post(new Runnable() {
 
		@Override
		public void run() {
			mTotalDistTV.setText(remainDistance);
			mArriveTimeTV.setText(remainTime);
		}
	});
}
 
private String calculateTotalRemainDistString(int nDist) {
	StringBuffer builder = new StringBuffer();
	StringUtils.formatDistance(nDist, UnitLangEnum.ZH, builder);
	String totalRemainDistS = builder.toString();
 
	return totalRemainDistS;
}
 
private String calculateArriveTime(int remainTime) {
	long mArriveTime = System.currentTimeMillis();
	Date curDate = new Date(mArriveTime);
	mArriveTime += ( remainTime * 1000 );
	Date arriveDate = new Date(mArriveTime);
 
	SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
	String mArriveTimeS = sdf.format(arriveDate);
 
    GregorianCalendar curCal = new GregorianCalendar();
    curCal.setTime(curDate);
    GregorianCalendar arriveCal = new GregorianCalendar();
    arriveCal.setTime(arriveDate);
 
	if ( curCal.get(GregorianCalendar.DAY_OF_MONTH) == arriveCal.get(GregorianCalendar.DAY_OF_MONTH) ) {
        if ( 0 == arriveCal.get(GregorianCalendar.HOUR_OF_DAY)) {
            mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time_at_wee), mArriveTimeS);
        } else {
            mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time), mArriveTimeS);
        }
	} else {
		int interval = getIntervalDays(curDate, arriveDate);
		if( interval == 1 ) {
            if ( arriveCal.get(GregorianCalendar.HOUR_OF_DAY) >= 0 && arriveCal.get(GregorianCalendar.HOUR_OF_DAY) < 4 ) {
                mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time),getString(R.string.nsdk_string_rg_wee_hours));
            } else {
                mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time),
                        getString(R.string.nsdk_string_rg_tomorrow));
            }
		} else if ( interval == 2 ) {
			mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time), 
					getString(R.string.nsdk_string_rg_the_day_after_tomorrow));
		} else if ( interval > 2 ) {
			mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time_after_day), "" + interval);
		} else {
			mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time), mArriveTimeS);
		}
	}
 
	return mArriveTimeS;
}

当前路名#

当前路名指当前定位点道路名信息(诱导下一段路名信息请参见“机动点”相关内容)。

关键代码#

@Override
public void onCurrentRoad(BNRGCurrentRoad arg0) {
	Log.d(BNRemoteConstants.TAG, "onCurrentRoad...........curRoadName = " + arg0.getCurrentRoadName());
 
	String curRoadName = arg0.getCurrentRoadName();
}

GPS 状态#

GPS信息回调主要用于进行GPS状态正常或者丢星的通知

关键代码#

@Override
public void onGPSLost(BNRGGPSLost arg0) {
	Log.d(BNRemoteConstants.TAG, "onGPSLost....");
}
 
@Override
public void onGPSNormal(BNRGGPSNormal arg0) {
	Log.d(BNRemoteConstants.TAG, "onGPSNormal....");
}

导航状态#

导航状态信息主要包括导航开始、结束,导航过程中偏航、偏航结束。

关键代码#

@Override
public void onNaviEnd(BNRGNaviEnd arg0) {
	Log.d(BNRemoteConstants.TAG, "onNaviEnd...........导航结束");
}
 
@Override
public void onNaviStart(BNRGNaviStart arg0) {
	Log.d(BNRemoteConstants.TAG, "onNaviStart...........导航开始");
}
@Override
public void onRoutePlanYawComplete(BNRGRPYawComplete arg0) {
	Log.d(BNRemoteConstants.TAG, "onRoutePlanYawComplete............偏航算路完成");
}
 
@Override
public void onRoutePlanYawing(BNRGRPYawing arg0) {
	Log.d(BNRemoteConstants.TAG, "onRoutePlanYawing............偏航中");
}

电子狗状态#

电子狗状态信息主要包括电子狗开始、结束。

关键代码#

@Override
public void onCruiseEnd(BNRGCruiseEnd arg0) {
	Log.d(BNRemoteConstants.TAG, "cruise end,关闭电子狗");
}
 
@Override
public void onCruiseStart(BNRGCruiseStart arg0) {
	Log.d(BNRemoteConstants.TAG, "cruise start,开启电子狗");
}

路口放大图#

路口放大图主要包括放大图数据、路名、剩余距离等信息。

关键代码#

@Override
public void onEnlargeRoad(BNEnlargeRoad enlargeRoad) {
	Log.d(BNRemoteConstants.MODULE_TAG, "onEnlargeRoad......enlargeRoad = " + enlargeRoad);
 
	final BNEnlargeRoad enlargeInfo = enlargeRoad;
	mMainHandler.post(new Runnable() {
		@Override
		public void run() {
			handleEnlargeRoad(enlargeInfo);
		}
	});
}
 
private void handleEnlargeRoad(BNEnlargeRoad enlargeRoad) {
	int enlargeType = enlargeRoad.getEnlargeRoadType();
	int enlargeState = enlargeRoad.getEnlargeRoadState();
 
	if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_HIDE) {
		if (mEnlargeRoadMapView != null) {
			mEnlargeRoadMapView.setVisibility(View.GONE);
		}
	} else {
 
		if (mEnlargeRoadMapView != null) {
			if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_UPDATE && 
				mEnlargeRoadMapView.getVisibility() != View.VISIBLE) {
				return;
			}
			mEnlargeRoadMapView.setVisibility(View.VISIBLE);	
		}
 
		mEnlargeType = enlargeType;
		if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_SHOW) {
			mbUpdateRasterInfo = false;
		} else {
			mbUpdateRasterInfo = true;
		}
 
		Bitmap basicImage = enlargeRoad.getBasicImage();
		Bitmap arrowImage = enlargeRoad.getArrowImage();
 
		String roadName = enlargeRoad.getRoadName();
		mTotalDist = enlargeRoad.getTotalDist();
		mRemDist = enlargeRoad.getRemainDist();
		if (!TextUtils.isEmpty(roadName)) {
			mRoadName = roadName;
		}
 
		mProgress = 0;
		if (mRemDist <= 0 || mTotalDist <= 0) {
			mProgress = 100;
		} else {
			mProgress = (int) (mTotalDist - mRemDist) * 100 / mTotalDist;
		}
 
		if (enlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {	            
	        mCarPosX = enlargeRoad.getCarPosX();
	        mCarPosY = enlargeRoad.getCarPosY();
	        mCarRotate = enlargeRoad.getCarPosRotate();
	        mCarRotate = - mCarRotate;
	    } else if ( null != mCarPosImgView ) {
	        mCarPosImgView.setVisibility(View.INVISIBLE);
	    }
 
	    if (enlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
 
	    	if ( null != bnav_rg_enlarge_image_mask ) {
	    		bnav_rg_enlarge_image_mask.setVisibility(View.INVISIBLE);
	    	}
		}
 
	     updateEnlargeRoadView(basicImage, arrowImage);
	}
}
 
	private void updateEnlargeRoadView(Bitmap baseicImage, Bitmap arrawImage) {
		if (!mbUpdateRasterInfo || mForceRefreshImage ) {
        	mForceRefreshImage = false;
            if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DIRECT_BOARD) {           	
                updateDirectBoardView(baseicImage, arrawImage);
 
            } else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_RASTER) {
                updateSimpleModelView(baseicImage, arrawImage);
 
            } else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {
                updateVectorMapView(baseicImage, arrawImage);
 
            } else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
                updateStreetView(baseicImage, arrawImage);
            }
        }
        updateProgress(baseicImage, arrawImage);
    }
 
	private void updateProgress(Bitmap baseicImage, Bitmap arrawImage){
        // 更新剩余距离和进度条
        StringBuffer distance = new StringBuffer();
        StringUtils.formatDistance(mRemDist, UnitLangEnum.ZH, distance);
        mRemainDistTV.setText(distance.toString());
        mProgressBar.setProgress(mProgress);
 
        if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {
            updateVectorMapCarPos(baseicImage, arrawImage);
        } else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
        	if ( null != mCarPosImgView ) {
            	mCarPosImgView.setVisibility(View.INVISIBLE);
            }
        } else if ( null != mCarPosImgView ) {
        	mCarPosImgView.setVisibility(View.INVISIBLE);
        }
    }

车点信息#

车点信息主要包括车标当前经纬度、方向和速度。

关键代码#

@Override
public void onCarInfo(BNRGCarInfo arg0) {
	// TODO Auto-generated method stub
	Log.d(BNRemoteConstants.MODULE_TAG, "onCarInfo...... ");
 
}

车标自由态#

车标自由态主要是说明当前是否处于野路,即自由态。

关键代码#

@Override

public void onCarFreeStatus(BNRGCarFreeStatus arg0) {  
    // TODO Auto-generated method stub  
    Log.d(BNRemoteConstants.MODULE_TAG, "onCarFreeStatus...... ");  
 
}

隧道信息#

隧道信息主要通知当前是否处于隧道中。

关键代码#

@Override  
public void onCarTunelInfo(BNRGCarTunelInfo arg0) {  
    // TODO Auto-generated method stub  
    Log.d(BNRemoteConstants.MODULE_TAG, "onCarTunelInfo...... ");  
}

摄像头信息#

摄像头信息向上通知车点附近所有摄像头信息,包括摄像头经纬度、类型。

关键代码#

@Override  
public void onNearByCamera(BNRGNearByCameraInfo arg0) {  
    // TODO Auto-generated method stub  
    Log.d(BNRemoteConstants.MODULE_TAG, "onNearByCamera...... ");  
}

AR 路线信息#

AR 路线包括路线形状点信息、时间线信息和交规信息。

关键代码#

@Override  
public void onRouteInfo(BNRGRouteInfo arg0) {  
    // TODO Auto-generated method stub  
    Log.d(BNRemoteConstants.MODULE_TAG, "onRouteInfo...... ");  
}

目的地信息#

目的地信息包括目的地经纬度、总距离和图标ID。

关键代码#

@Override  
public void onDestInfo(BNRGDestInfo arg0) {  
    // TODO Auto-generated method stub  
    Log.d(BNRemoteConstants.MODULE_TAG, "onDestInfo...... ");  
}