fix bug of addMarker

This commit is contained in:
zhongchao
2021-05-11 16:54:35 +08:00
parent 470fabfe1b
commit b467198505
4 changed files with 58 additions and 25 deletions

View File

@@ -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();

View File

@@ -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<String, String> mMarkerCachesResMd5Values = new HashMap<>();
protected static final ConcurrentHashMap<String, String> mMarkerCachesResMd5Values = new ConcurrentHashMap<>();
/**
* 上一帧数据的缓存
*/
protected Map<String, IMogoMarker> mMarkersCaches = new HashMap<>();
protected static ConcurrentHashMap<String, IMogoMarker> 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 {

View File

@@ -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 道路数据集合
*/

View File

@@ -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<ADASRecognizedResult> recognizedResults = (List<ADASRecognizedResult>) msg.obj;
AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(recognizedResults);
}
break;
default:
break;
}
}
};