From b467198505979aaf498f6c3ccbb6b459dcc877a4 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 11 May 2021 16:54:35 +0800 Subject: [PATCH] fix bug of addMarker --- .../drawer/AdasRecognizedResultDrawer.java | 12 +++--- .../mogo/module/common/drawer/BaseDrawer.java | 19 +++++---- .../common/drawer/SnapshotSetDataDrawer.java | 10 +++-- .../service/marker/MapMarkerManager.java | 42 +++++++++++++++---- 4 files changed, 58 insertions(+), 25 deletions(-) diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java index dcbfcd4d1d..0118771581 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java @@ -37,7 +37,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { super(); } - private final Map< String, ADASRecognizedResult > mLastPositions = new ConcurrentHashMap<>(); + private final ConcurrentHashMap< String, ADASRecognizedResult > mLastPositions = new ConcurrentHashMap<>(); public static AdasRecognizedResultDrawer getInstance() { if ( sInstance == null ) { @@ -79,11 +79,12 @@ class AdasRecognizedResultDrawer extends BaseDrawer { return; } - Map< String, IMogoMarker > newAdasRecognizedMarkersCaches = new HashMap<>(); + ConcurrentHashMap< String, IMogoMarker > newAdasRecognizedMarkersCaches = new ConcurrentHashMap<>(); List< ADASRecognizedResult > newDiffSet = new ArrayList<>(); for ( ADASRecognizedResult recognizedListResult : resultList ) { if ( isUselessValue( recognizedListResult ) ) { + Logger.d(TAG,"存在uuid为空数据"); continue; } @@ -93,7 +94,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { if ( marker != null && !marker.isDestroyed() ) { renderAdasOneFrame( marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches ); } else { - // 新增差集 + // 新增添加进差集 newDiffSet.add( recognizedListResult ); } } @@ -105,7 +106,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { // 需要新增的 marker 数量 int newDiffSetSize = newDiffSet.size(); // 能复用的数量 - int size = cachedMarkerSize >= newDiffSetSize ? newDiffSetSize : cachedMarkerSize; + int size = Math.min(cachedMarkerSize, newDiffSetSize); // 复用过期 marker if ( newDiffSetSize > 0 ) { @@ -121,7 +122,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { continue; } - // 更新资源内容 + // 复用,更新marker 3D资源 if ( old == null || old.type != recognizedListResult.type ) { String resIdVal = null; int resId = getModelRes( recognizedListResult.type ); @@ -227,6 +228,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { obj.context = mContext; obj.marker = marker; obj.speed = recognizedListResult.speed; + obj.uuid = recognizedListResult.uuid; msg.obj = obj; msg.what = MSG_DISPLAY_SPEED; msg.sendToTarget(); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java index ecbef3bf1a..405c693e64 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import static java.lang.Math.PI; @@ -45,12 +46,14 @@ class BaseDrawer { public IMogoMarker marker; public Context context; double speed; + String uuid; public void showSpeed() { try { showSelfSpeed(context, marker, speed, + uuid, MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()); } catch (Exception e) { e.printStackTrace(); @@ -79,12 +82,12 @@ class BaseDrawer { /** * 地图内部资源md5缓存,便于资源复用 */ - protected static final Map mMarkerCachesResMd5Values = new HashMap<>(); + protected static final ConcurrentHashMap mMarkerCachesResMd5Values = new ConcurrentHashMap<>(); /** * 上一帧数据的缓存 */ - protected Map mMarkersCaches = new HashMap<>(); + protected static ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>(); protected final Context mContext; @@ -208,8 +211,7 @@ class BaseDrawer { AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom(type); return recognizedType != AdasRecognizedType.classIdBicycle && recognizedType != AdasRecognizedType.classIdMoto - && recognizedType != AdasRecognizedType.classIdPerson - && recognizedType != AdasRecognizedType.classIdUnKnow; //todo unKnow物体不绘制车速 + && recognizedType != AdasRecognizedType.classIdPerson; } /** @@ -252,8 +254,8 @@ class BaseDrawer { if (recognizedType == AdasRecognizedType.classIdTrafficBus) { return "#D8D8D8FF"; } - if (recognizedType == AdasRecognizedType.classIdUnKnow){ //todo unKnow颜色绘制 - return "#FF2894FF"; + if (recognizedType == AdasRecognizedType.classIdUnKnow) { //todo unKnow颜色绘制 + return Car3DModelColor.Normal.color; } // 距离策略 double[] coordinates = getCurCoordinates(); @@ -338,7 +340,7 @@ class BaseDrawer { * @param speed 是否显示速度 * @param isVrMode 是否是vrMode */ - public void showSelfSpeed(Context context, IMogoMarker mogoMarker, double speed, boolean isVrMode) { + public void showSelfSpeed(Context context, IMogoMarker mogoMarker, double speed, String uuid, boolean isVrMode) { if (mogoMarker == null || mogoMarker.isDestroyed()) { return; } @@ -361,7 +363,8 @@ class BaseDrawer { mSpeedView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); mSpeedView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); } - mSpeedView.setText(speedVal); + String text = "速度:" + speedIntVal + "/n" + "uuid:" + uuid; + mSpeedView.setText(text); mogoMarker.updateInfoWindowView(mSpeedView); MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().setMarkerInfoResName(speedVal, mogoMarker.getMarkerInfoResName()); } else { diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java index 0c3e3f2bb8..92f54b2cc0 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java @@ -73,7 +73,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic return sInstance; } - private final Map< String, CloudRoadData > mLastPositions = new ConcurrentHashMap<>(); + private final ConcurrentHashMap< String, CloudRoadData > mLastPositions = new ConcurrentHashMap<>(); private boolean mIsVrMode = false; @@ -87,7 +87,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic Logger.d( TAG, "%s - %s", descriptor, isTrue ); mChangeCarModeStatus = true; sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches ); - mMarkersCaches = new HashMap<>(); + mMarkersCaches = new ConcurrentHashMap<>(); if ( mLastPositions != null ) { mLastPositions.clear(); } @@ -142,7 +142,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } /** - * mogo 他车、mogo 他车识别的社会车辆、路边单元识别的车辆 + * 绘制来自云端的 mogo 他车、mogo 他车识别的社会车辆、路边单元识别的车辆 * * @param data 自车周边数据 */ @@ -155,7 +155,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic List< CloudRoadData > allDatumsList = new ArrayList<>(); prepareData( data.getAllList(), allDatumsList ); - Map< String, IMogoMarker > newMarkersCaches = new HashMap<>( allDatumsList.size() ); + ConcurrentHashMap< String, IMogoMarker > newMarkersCaches = new ConcurrentHashMap<>( allDatumsList.size() ); List< CloudRoadData > newDiffSet = new ArrayList<>(); for ( CloudRoadData cloudRoadData : allDatumsList ) { @@ -298,6 +298,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic obj.context = mContext; obj.marker = marker; obj.speed = cloudRoadData.getSpeed(); + obj.uuid = cloudRoadData.getUuid(); msg.obj = obj; msg.what = MSG_DISPLAY_SPEED; msg.sendToTarget(); @@ -317,6 +318,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic /** * vr 模式下显示合并数据,否则只显示 mogo 车辆上报的数据 + * 展示融合数据,不包括自车定位数据和adas识别数据 * * @param data 道路数据集合 */ diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index b3e3c4cb5a..c539d89bf5 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -139,7 +139,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, }); } - // 下发的数据 + + /* + * 云端下发数据与adas定频传输数据均发送至同一Handler线程处理 + */ + // 云端下发的数据 MoGoAiCloudRealTime.registerOnMsgListener(new IMogoCloudOnMsgListener() { @Override public void onMsgSend(long id) { @@ -151,14 +155,17 @@ public class MapMarkerManager implements IMogoMarkerClickListener, DebugConfig.setStatus(DebugConfig.sDownloadSnapshot, true); Message msg = mSnapshotHandler.obtainMessage(); msg.obj = mogoSnapshotSetData; + msg.what = MSG_SNAPSHOT; msg.sendToTarget(); } }); - // adas 每隔一秒传递的数据 + // adas 每隔一定频率传递过来的数据 MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback(resultList -> { - // 绘制近景识别到的车辆 - AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList); + Message msg = mSnapshotHandler.obtainMessage(); + msg.obj = resultList; + msg.what = MSG_ADAS; + msg.sendToTarget(); //添加自车的定位图标,碰撞只有一个预警,还需要和adas 联调, // for ( ADASRecognizedResult result : resultList) { @@ -202,15 +209,34 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } } + private final static int MSG_SNAPSHOT = 1; + private final static int MSG_ADAS = 2; + /** + * todo 后续从云端和adas侧拿到的数据 需求对数据流进行重新架构以扩展除添加marker外的其他预警类业务 + * todo (应需要模块主动注册adas或云端数据回调,在具体模块内添加绘制需求,需要与地图侧确认是否支持并发) + */ private final Handler mSnapshotHandler = new Handler(WorkThreadHandler.newInstance("snapshot-thread").getLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); - if (msg.obj instanceof MogoSnapshotSetData) { - SnapshotSetDataDrawer.getInstance().renderSnapshotData(((MogoSnapshotSetData) msg.obj)); - } else if (msg.obj == null) { - SnapshotSetDataDrawer.getInstance().renderSnapshotData(null); + switch (msg.what) { + case MSG_SNAPSHOT: + if (msg.obj instanceof MogoSnapshotSetData) { + SnapshotSetDataDrawer.getInstance().renderSnapshotData(((MogoSnapshotSetData) msg.obj)); + } else { + SnapshotSetDataDrawer.getInstance().renderSnapshotData(null); + } + break; + case MSG_ADAS: + // 绘制近景识别到的车辆 + if (msg.obj instanceof List) { + List recognizedResults = (List) msg.obj; + AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(recognizedResults); + } + break; + default: + break; } } };