diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt index ea16d88c29..869d07e4bd 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt @@ -55,6 +55,12 @@ enum class TrafficTypeEnum( "卡车", R.raw.daba, R.raw.daba + ), + TYPE_TRAFFIC_ID_SPECIAL_VEHICLE( + 11, + "特殊车辆", + R.raw.special_vehicle, + R.raw.special_vehicle ) diff --git a/modules/mogo-module-common/src/main/res/raw/jinjicheliang.n3d b/modules/mogo-module-common/src/main/res/raw/special_vehicle.n3d similarity index 100% rename from modules/mogo-module-common/src/main/res/raw/jinjicheliang.n3d rename to modules/mogo-module-common/src/main/res/raw/special_vehicle.n3d diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt index 53b1c55f23..e0599c9fd9 100644 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt @@ -31,9 +31,6 @@ class MogoPrivateObuManager private constructor() { private var mMogoServiceApis: IMogoServiceApis? = null private var mIMoGoWaringProvider: IMoGoWaringProvider? = null - val icw_data = - "02000114010000000000001effd7892b11a4440af70100142a03000907e506100e2917019000005662010a45000b0000220847162c000037970010000a17f6215c459478b6010347ac045000090a0006012c01f4009600080073007300730073000b000000000000000000000000000000002b000037780000247300003261000000000000426c827f47001200100000000000000000000021220000349a006c0010000a17f63ecb45947ba301030000332c0010000a17f642e945947bea010300004d580010000a17f6435545947e4e0103000054c40010000a17f6413a45947f96010300005c300010000a17f62c2845947d140103000070e40010000a17f5fdb14594786001030000992000060004ffec2710" - private var mContext: Context? = null fun init(context: Context?) { diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt deleted file mode 100644 index 5707d90fbf..0000000000 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt +++ /dev/null @@ -1,264 +0,0 @@ -package com.mogo.module.obu.mogo.map - -import android.content.Context -import android.os.Handler -import android.os.Message -import com.mogo.commons.AbsMogoApplication -import com.mogo.map.MogoLatLng -import com.mogo.map.marker.IMogoMarker -import com.mogo.map.marker.MogoMarkerOptions -import com.mogo.module.common.MogoApisHandler -import com.mogo.module.common.R -import com.mogo.module.common.constants.DataTypes -import com.mogo.utils.WorkThreadHandler -import com.zhidao.support.obu.model.CvxRvInfoIndInfo -import com.zhidao.support.obu.model.CvxV2vThreatIndInfo -import com.zhidao.support.obu.model.advance.MovingObjectInfo -import com.zhidao.support.obu.model.advance.V2vThreat -import java.util.concurrent.ConcurrentHashMap - -/** - * @author xiaoyuzhou - * @date 2021/8/9 11:08 上午 - */ -class ObuRecognizedResultDrawer { - - private val TAG = "ObuRecognizedResultDrawer" - - private var mContext: Context? = null - - // 动画持续时间 - private val stepTime = 100L - - // 维护Obu识别的他车集合 - private val mCvxRvInfoIndInfoMap = ConcurrentHashMap() - - // 地图内部资源md5缓存,便于资源复用 - private val mMarkerCachesResMd5Values = ConcurrentHashMap() - - // 上一帧数据的缓存,用来做移动动画 - private val mMarkersCaches = ConcurrentHashMap() - - // 维护一个线程定时轮询数据进行地图绘制 - private val mDrawerHandler: Handler = - object : Handler(WorkThreadHandler.newInstance("other_car_obu_drawer").looper) { - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - drawerCvxRvInfo() - // 延时50毫秒重复发送自己,定时轮询进行车辆绘制,可以及时将已经不存在车辆删除 - sendEmptyMessageDelayed(0, 100L) - } - } - - init { - mContext = AbsMogoApplication.getApp() - mDrawerHandler.sendEmptyMessageDelayed(1, 0L) - } - - /** - * 添加识别的数据 - */ - fun addCvxRvInfoIndInfo(cvxRvInfoIndInfo: CvxRvInfoIndInfo) { - mCvxRvInfoIndInfoMap[cvxRvInfoIndInfo.vehicle_id] = cvxRvInfoIndInfo - } - - /** - * 更新识别数据,V2V预警的时候需要修改车辆颜色 - */ - fun updateCvxRvInfoIndInfo(threatLevel: Int, cvxV2vThreatIndInfo: CvxV2vThreatIndInfo) { - val value = mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id] - // 存在即改变 - value?.let { - // 修改位置信息 - value.basic_info = cvxV2vThreatIndInfo.basic_info - // 修改V2X预警级别 - if (!value.threat_infos.isNullOrEmpty()) { - value.threat_infos[0] = cvxV2vThreatIndInfo.threat_info - } else { - val threatInfos = ArrayList() - threatInfos.add(0, cvxV2vThreatIndInfo.threat_info) - value.threat_infos = threatInfos - } - - // 修改颜色 - when (threatLevel) { - 1 -> { - mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#D8D8D8FF") - } - 2 -> { - mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#FFD53EFF") - } - 3 -> { - mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#FF3C45FF") - } - else -> { - mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#D8D8D8FF") - } - } - mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id] = value - } - // 不存在即添加 - ?: let { - // 构建周边车辆数据结构 - val cvxRvInfoIndInfo = CvxRvInfoIndInfo( - cvxV2vThreatIndInfo.opCode, - cvxV2vThreatIndInfo.ch, - cvxV2vThreatIndInfo.bitMask - ) - cvxRvInfoIndInfo.vehicle_id = cvxV2vThreatIndInfo.vehicle_id - cvxRvInfoIndInfo.basic_info = cvxV2vThreatIndInfo.basic_info - // 修改V2X预警级别 - if (!cvxRvInfoIndInfo.threat_infos.isNullOrEmpty()) { - cvxRvInfoIndInfo.threat_infos[0] = cvxV2vThreatIndInfo.threat_info - } else { - val threatInfos = ArrayList() - threatInfos.add(0, cvxV2vThreatIndInfo.threat_info) - cvxRvInfoIndInfo.threat_infos = threatInfos - } - - mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id] = cvxRvInfoIndInfo - } - } - - /** - * 更新识别数据,V2V预警的时候需要修改车辆颜色 - */ - fun updateCvxRvInfoIndInfo(threatLevel: Int, key: String, movingObjectInfo: MovingObjectInfo) { - val value = mCvxRvInfoIndInfoMap[key] - value?.let { - value.basic_info = movingObjectInfo - // 修改颜色 - when (threatLevel) { - 1 -> { - mMarkersCaches[key]?.setAnchorColor("#D8D8D8FF") - } - 2 -> { - mMarkersCaches[key]?.setAnchorColor("#FFD53EFF") - } - 3 -> { - mMarkersCaches[key]?.setAnchorColor("#FF3C45FF") - } - else -> { - mMarkersCaches[key]?.setAnchorColor("#D8D8D8FF") - } - } - mCvxRvInfoIndInfoMap[key] = value - } - } - - /** - * 移除识别的数据 - */ - fun removeCvxRvInfoIndInfo(key: String) { - if (mCvxRvInfoIndInfoMap.containsKey(key)) { - mCvxRvInfoIndInfoMap.remove(key) - } - } - - /** - * 绘制 - */ - private fun drawerCvxRvInfo() { - // 数据为空的时候清除所有数据 - if (mCvxRvInfoIndInfoMap.isEmpty()) { - mMarkersCaches.forEach { - it.value.remove() - } - mMarkersCaches.clear() - } else { - // 循环绘制识别的数据 - mCvxRvInfoIndInfoMap.forEach { - //Logger.d(TAG, "drawerCvxRvInfo:${it.value}") - - // 如果数据已经存在 Marker,取出做动画 - if (mMarkersCaches[it.key] != null) { - mMarkersCaches[it.key]?.let { it1 -> - changeDynamicMarker(it1, it.value) - } - } - // 不存在的添加Marker绘制 - else { - drawObuRecognizedDataMarker(it.value) - } - } - } - } - - - /** - * 绘制单条 - */ - private fun drawObuRecognizedDataMarker(cvxRvInfoIndInfo: CvxRvInfoIndInfo) { - if (cvxRvInfoIndInfo.basic_info != null && cvxRvInfoIndInfo.basic_info.position != null) { - val resId: Int = R.raw.tachexiaoche - val resIdVal = resId.toString() + "" - - val options = MogoMarkerOptions() - .owner(DataTypes.TYPE_MARKER_ADAS) - .anchor(0.5f, 0.5f) - .set3DMode(true) - .gps(true) - .controlAngle(true) - .resName(mMarkerCachesResMd5Values[resIdVal]) - .icon3DRes(resId) - .rotate(cvxRvInfoIndInfo.basic_info.heading.toFloat()) - .position( - MogoLatLng( - cvxRvInfoIndInfo.basic_info.position.latitude, - cvxRvInfoIndInfo.basic_info.position.longitude - ) - ) - - // 判断车辆V2X预警级别,调整车辆颜色 - if (!cvxRvInfoIndInfo.threat_infos.isNullOrEmpty() && options != null) { - // 修改颜色 - when (cvxRvInfoIndInfo.threat_infos.first().threat_level) { - 1 -> { - options.anchorColor("#D8D8D8FF") - } - 2 -> { - options.anchorColor("#FFD53EFF") - } - 3 -> { - options.anchorColor("#FF3C45FF") - } - else -> { - options.anchorColor("#D8D8D8FF") - } - } - } - - val marker = MogoApisHandler.getInstance().apis - .mapServiceApi - .getMarkerManager(mContext) - .addMarker(DataTypes.TYPE_MARKER_OBU_DATA, options) - - // 缓存3D资源 - mMarkerCachesResMd5Values[resIdVal] = marker.markerResName - // 缓存数据 - mMarkersCaches[cvxRvInfoIndInfo.vehicle_id] = marker - } - } - - /** - * 带动画的修改Marker - */ - private fun changeDynamicMarker( - marker: IMogoMarker, - cvxRvInfoIndInfo: CvxRvInfoIndInfo - ) { - if (cvxRvInfoIndInfo.basic_info != null && cvxRvInfoIndInfo.basic_info.position != null) { - val renderLoc = MogoLatLng( - cvxRvInfoIndInfo.basic_info.position.latitude, - cvxRvInfoIndInfo.basic_info.position.longitude - ) - - marker.addDynamicAnchorPosition( - renderLoc, - cvxRvInfoIndInfo.basic_info.heading.toFloat(), - stepTime - ) - } - } - -} \ No newline at end of file diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuVulnerableGroupsDrawer.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuVulnerableGroupsDrawer.kt deleted file mode 100644 index 8dcb81b024..0000000000 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuVulnerableGroupsDrawer.kt +++ /dev/null @@ -1,172 +0,0 @@ -package com.mogo.module.obu.mogo.map - -import android.content.Context -import com.mogo.commons.AbsMogoApplication -import com.mogo.map.MogoLatLng -import com.mogo.map.marker.IMogoMarker -import com.mogo.map.marker.MogoMarkerOptions -import com.mogo.module.common.MogoApisHandler -import com.mogo.module.common.R -import com.mogo.module.common.constants.DataTypes -import com.zhidao.support.obu.model.CvxPtcInfoIndInfo -import java.util.concurrent.ConcurrentHashMap - -/** - *@author xiaoyuzhou - *@date 2021/8/10 7:08 下午 - * 弱势群体预警 - */ -class ObuVulnerableGroupsDrawer { - private val TAG = "ObuVulnerableGroupsDrawer" - - private var mContext: Context? = null - - // 动画持续时间 - private val stepTime = 100L - - // 维护Obu识别的弱势交通预警 - private val mCvxPtcInfoIndInfoMap = ConcurrentHashMap() - - // 地图内部资源md5缓存,便于资源复用 - private val mMarkerCachesResMd5Values = ConcurrentHashMap() - - // 上一帧数据的缓存,用来做移动动画 - private val mMarkersCaches = ConcurrentHashMap() - - init { - mContext = AbsMogoApplication.getApp() - } - - /** - * 添加识别的数据 - */ - fun addCvxRvInfoIndInfo(value: CvxPtcInfoIndInfo) { - mCvxPtcInfoIndInfoMap[value.id] = value - drawerCvxPtcInfoIndInfo() - } - - /** - * 移除识别的数据 - */ - fun removeCvxPtcInfoIndInfo(key: String) { - mCvxPtcInfoIndInfoMap.remove(key) - drawerCvxPtcInfoIndInfo() - } - - /** - * 更新识别数据,V2V预警数据 - */ - fun updateCvxPtcInfoIndInfo(value: CvxPtcInfoIndInfo) { - mCvxPtcInfoIndInfoMap[value.id] = value - // 修改颜色 - mMarkersCaches[value.id]?.setAnchorColor("#FF3C45FF") - drawerCvxPtcInfoIndInfo() - } - - /** - * 绘制 - */ - private fun drawerCvxPtcInfoIndInfo() { - // 数据为空的时候清除所有数据 - if (mCvxPtcInfoIndInfoMap.isEmpty()) { - mMarkersCaches.forEach { - it.value.remove() - } - mMarkersCaches.clear() - } else { - // 循环绘制识别的数据 - mCvxPtcInfoIndInfoMap.forEach { - //Logger.d(TAG, "drawerCvxRvInfo:${it.value}") - // 如果数据已经存在 Marker,取出做动画 - if (mMarkersCaches[it.key] != null) { - mMarkersCaches[it.key]?.let { it1 -> - changeDynamicMarker(it1, it.value) - } - } - // 不存在的添加Marker绘制 - else { - drawObuRecognizedDataMarker(it.value) - } - } - } - } - - - /** - * 绘制单条 - */ - private fun drawObuRecognizedDataMarker(cvxPtcInfoIndInfo: CvxPtcInfoIndInfo) { - if ((cvxPtcInfoIndInfo.ptc_type == 0x1 || cvxPtcInfoIndInfo.ptc_type == 0x2) && - (cvxPtcInfoIndInfo.basic_info != null && cvxPtcInfoIndInfo.basic_info.position != null) - ) { - var resId: Int = R.raw.people - when (cvxPtcInfoIndInfo.ptc_type) { - // 未知 - 0x0 -> { - resId = R.raw.tache - } - // 非机动车 - 0x1 -> { - resId = R.raw.motorbike - } - // 行人 - 0x2 -> { - resId = R.raw.people - } - // RSU - 0x3 -> { - } - else -> { - } - } - - val resIdVal = resId.toString() + "" - - val options = MogoMarkerOptions() - .owner(DataTypes.TYPE_MARKER_ADAS) - .anchor(0.5f, 0.5f) - .set3DMode(true) - .gps(true) - .controlAngle(true) - .resName(mMarkerCachesResMd5Values[resIdVal]) - .icon3DRes(resId) - .rotate(cvxPtcInfoIndInfo.basic_info.heading.toFloat()) - .position( - MogoLatLng( - cvxPtcInfoIndInfo.basic_info.position.latitude, - cvxPtcInfoIndInfo.basic_info.position.longitude - ) - ) - val marker = MogoApisHandler.getInstance().apis.mapServiceApi.getMarkerManager(mContext) - .addMarker(DataTypes.TYPE_MARKER_OBU_DATA, options) - - // 缓存数据 - mMarkersCaches[cvxPtcInfoIndInfo.id] = marker - } - } - - /** - * 带动画的修改Marker - */ - private fun changeDynamicMarker( - marker: IMogoMarker, - cvxPtcInfoIndInfo: CvxPtcInfoIndInfo - ) { - if ((cvxPtcInfoIndInfo.ptc_type == 0x1 || cvxPtcInfoIndInfo.ptc_type == 0x2) && - (cvxPtcInfoIndInfo.basic_info != null && cvxPtcInfoIndInfo.basic_info.position != null) - ) { - val renderLoc = MogoLatLng( - cvxPtcInfoIndInfo.basic_info.position.latitude, - cvxPtcInfoIndInfo.basic_info.position.longitude - ) - - marker.addDynamicAnchorPosition( - renderLoc, - cvxPtcInfoIndInfo.basic_info.heading.toFloat(), - stepTime - ) - } - } - - -} \ No newline at end of file diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/utils/TrafficDataConvertUtils.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/utils/TrafficDataConvertUtils.kt index d3123e2b0c..8b437c147a 100644 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/utils/TrafficDataConvertUtils.kt +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/utils/TrafficDataConvertUtils.kt @@ -2,6 +2,7 @@ package com.mogo.module.obu.mogo.utils import com.mogo.module.common.drawer.bean.TrafficData import com.mogo.module.common.enums.TrafficTypeEnum +import com.zhidao.support.obu.constants.ObuConstants import com.zhidao.support.obu.model.CvxPtcInfoIndInfo import com.zhidao.support.obu.model.CvxRvInfoIndInfo import com.zhidao.support.obu.model.CvxV2vThreatIndInfo @@ -43,7 +44,6 @@ object TrafficDataConvertUtils { return null } val trafficData = TrafficData() - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE trafficData.uuid = info.vehicle_id trafficData.lat = info.basic_info.position.latitude trafficData.lon = info.basic_info.position.longitude @@ -52,6 +52,12 @@ object TrafficDataConvertUtils { // 判断车辆V2X预警级别,调整车辆颜色 trafficData.threatLevel = info.threat_info.threat_level + if (info.threat_info.app_id == ObuConstants.USE_CASE_ID.EVW) { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_SPECIAL_VEHICLE + } else { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE + } + return trafficData }