changed the marker cache origin data to two pocket

This commit is contained in:
zhongchao
2021-06-03 16:34:29 +08:00
parent 0a9f187f0e
commit 6c851f3f2a
4 changed files with 42 additions and 32 deletions

View File

@@ -35,6 +35,11 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
private static volatile AdasRecognizedResultDrawer sInstance;
/**
* 上一帧数据的缓存
*/
protected static Map<String, IMogoMarker> mMarkersCaches = new ConcurrentHashMap<>();
public AdasRecognizedResultDrawer() {
super();
}
@@ -104,7 +109,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
}
removeUselessMarker();
removeUselessMarker(mMarkersCaches);
removeUselessLastRecord();
// 能复用的 marker 数量
@@ -261,7 +266,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
* 绘制某个物体的一个数据
*
* @param recognizedListResult {@link ADASRecognizedResult}
* @param newAdasRecognizedMarkersCaches
* @param newAdasRecognizedMarkersCaches 缓存集合
*/
private void renderAdasOneFrame(IMogoMarker marker,
String uniqueKey,
@@ -310,8 +315,8 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
/**
* 绘制 marker
*
* @param recognizedListResult
* @return
* @param recognizedListResult {@link ADASRecognizedResult}
* @return {@link IMogoMarker}
*/
private IMogoMarker drawAdasRecognizedDataMarker(ADASRecognizedResult recognizedListResult) {
if (recognizedListResult == null) {
@@ -326,7 +331,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
carColor = getModelRenderColor(recognizedListResult.type, FROM_ADAS, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading);
}
MogoMarkerOptions options = new MogoMarkerOptions()
.owner(DataTypes.TYPE_MARKER_MERGE)
.owner(DataTypes.TYPE_MARKER_ADAS)
.anchor(0.5f, 0.5f)
.set3DMode(true)
.gps(true)
@@ -336,7 +341,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
.icon3DRes(resId)
.rotate((float) recognizedListResult.heading)
.position(new MogoLatLng(recognizedListResult.lat, recognizedListResult.lon));
IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(DataTypes.TYPE_MARKER_MERGE, options);
IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(DataTypes.TYPE_MARKER_ADAS, options);
cacheMarkerIconResMd5Val(resIdVal, marker);
return marker;
}
@@ -355,9 +360,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
if (mMarkersCaches != null) {
mMarkersCaches.clear();
}
if (mLastPositions != null) {
mLastPositions.clear();
}
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE);
mLastPositions.clear();
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_ADAS);
}
}

View File

@@ -28,6 +28,8 @@ import java.util.concurrent.ConcurrentHashMap;
import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS;
import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_MY_LOCATION;
import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ROAD_UNIT;
import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_ADAS;
import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_DATA;
import static java.lang.Math.PI;
public
@@ -57,11 +59,6 @@ class BaseDrawer {
*/
protected static final ConcurrentHashMap<String, String> mMarkerCachesResMd5Values = new ConcurrentHashMap<>();
/**
* 上一帧数据的缓存
*/
protected static Map<String, IMogoMarker> mMarkersCaches = new ConcurrentHashMap<>();
protected final Context mContext;
private TextView mSpeedView;
@@ -116,7 +113,7 @@ class BaseDrawer {
/**
* 清除无效[为 null 或者 已被销毁]的 marker
*/
protected void removeUselessMarker() {
protected void removeUselessMarker(Map<String, IMogoMarker> mMarkersCaches) {
if (mMarkersCaches == null || mMarkersCaches.isEmpty()) {
return;
}
@@ -210,19 +207,16 @@ class BaseDrawer {
protected String getModelRenderColor(int type, int fromType, double speed, double lon, double lat, double angle) {
AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom(type);
if (recognizedType == AdasRecognizedType.classIdTrafficBus) {
return "#D8D8D8FF";
}
if (recognizedType == AdasRecognizedType.classIdUnKnow) {
return Car3DModelColor.Normal.color;
}
// 距离策略 todo 此处两种策略是临时方案
double[] coordinates = getCurCoordinates();
double distance = CoordinateUtils.calculateLineDistance(lon, lat, coordinates[0], coordinates[1]) * 100;
if (distance < 50) {
if (distance < 15) {
return Car3DModelColor.Dangerous.color; // todo 方案1
// return Car3DTestModelColor.getTestModelColor(fromType, Waring_Dangerous); // todo 方案2
} else if (distance < 100 && distance >= 50) {
} else if (distance < 50 && distance >= 15) {
return Car3DModelColor.Warming.color; // todo 方案1
// return Car3DTestModelColor.getTestModelColor(fromType, Waring_Close); // todo 方案2
}
@@ -531,4 +525,14 @@ class BaseDrawer {
return new double[]{lon, lat};
}
protected String getDataTypes(int fromType) {
switch (fromType) {
case FROM_MY_LOCATION:
return TYPE_MARKER_CLOUD_DATA;
case FROM_ADAS:
return TYPE_MARKER_ADAS;
default:
return TYPE_MARKER_CLOUD_DATA;
}
}
}

View File

@@ -34,8 +34,6 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_MERGE;
/**
* @author congtaowang
* @since 2020/10/28
@@ -77,6 +75,11 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
return sInstance;
}
/**
* 上一帧数据的缓存
*/
protected static Map<String, IMogoMarker> mMarkersCaches = new ConcurrentHashMap<>();
private final Map<String, SocketDownData.CloudRoadDataProto> mLastPositions = new ConcurrentHashMap<>();
private boolean mIsVrMode = false;
@@ -122,7 +125,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
}
mMarkersCaches.clear();
mLastPositions.clear();
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE);
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_CLOUD_DATA);
return true;
}
if (data == null || (
@@ -132,7 +135,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
mMarkersCaches.clear();
}
mLastPositions.clear();
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE);
sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_CLOUD_DATA);
return true;
}
return false;
@@ -172,7 +175,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
newDiffSet.add(cloudRoadData);
}
}
removeUselessMarker();
removeUselessMarker(mMarkersCaches);
removeUselessLastRecord();
// 能复用的 marker 数量
@@ -227,8 +230,8 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
/**
* todo 后面涉及到此类变化的数据均改动
*
* @param marker
* @param cloudRoadDataProto
* @param marker {@link IMogoMarker}
* @param cloudRoadDataProto {@link SocketDownData.CloudRoadDataProto}
*/
private void updateCacheMarkerRes(IMogoMarker marker, SocketDownData.CloudRoadDataProto cloudRoadDataProto) {
String resIdVal;
@@ -290,7 +293,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
*/
private void renderSnapshotOneFrame(IMogoMarker marker, String uniqueKey, SocketDownData.CloudRoadDataProto cloudRoadData, Map<String, IMogoMarker> newSnapshotCaches) {
Logger.d(TAG,"renderSnapshotOneFrame");
Logger.d(TAG, "renderSnapshotOneFrame");
final long start = System.currentTimeMillis();
SocketDownData.CloudRoadDataProto lastPosition = mLastPositions.remove(uniqueKey);
@@ -431,7 +434,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
}
MogoMarkerOptions options = new MogoMarkerOptions()
.owner(TYPE_MARKER_MERGE)
.owner(getDataTypes(data.getFromType()))
.anchor(0.5f, 0.5f)
.rotate((float) data.getHeading())
.object(data)
@@ -452,7 +455,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
options.icon(view);
resIdVal = view.getId() + "";
}
IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(TYPE_MARKER_MERGE, options);
IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(getDataTypes(data.getFromType()), options);
cacheMarkerIconResMd5Val(resIdVal, marker);
if (!TextUtils.isEmpty(data.getSn())) {