fix bug of track draw

This commit is contained in:
zhongchao
2022-07-04 16:28:30 +08:00
parent 8307cd0148
commit 4809f5af70
7 changed files with 43 additions and 28 deletions

View File

@@ -45,6 +45,10 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber,
if (FunctionBuildConfig.isDrawIdentifyData) {
ThreadUtils.getSinglePool().execute {
IdentifyFactory.renderAdasRecognizedResult(trafficData)
val pl = MessagePad.PlanningObject.newBuilder().setUuid(127).build()
val list = mutableListOf<MessagePad.PlanningObject>()
list.add(pl)
IdentifyFactory.renderPlanningWarningObj(list)
}
} else {
IdentifyFactory.clearOldMarker()

View File

@@ -42,12 +42,14 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener {
/**
* 记录每次实际绘制的交通元素UUID
*/
@SuppressLint("NewApi")
private val trafficDataUuidList = ArraySet<String>()
/**
* 过滤后的数据集合
*/
private val mFilterTrafficData = ArrayList<TrackedObject>()
@SuppressLint("NewApi")
private val mFilterTrafficData = HashMap<String,TrackedObject>()
/**
* planning 感知物预警缓存用于重置color状态
@@ -68,7 +70,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener {
val trackObj = mMarkersCaches[trackId]
trackObj?.let {
colorTrafficData[trackId] = PlanningTrack(
"#FFBCB239",
"#BCB239FF",
CallerAutoPilotStatusListenerManager.getCurWgs84SatelliteTime()
)
}
@@ -128,7 +130,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener {
*
* @return 过滤后的数据集合
*/
private fun filterTrafficData(trafficData: List<TrackedObject>): ArrayList<TrackedObject> {
private fun filterTrafficData(trafficData: List<TrackedObject>): HashMap<String,TrackedObject> {
mFilterTrafficData.clear()
trafficDataUuidList.clear()
for (data in trafficData) {
@@ -154,7 +156,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener {
colorTrafficData.remove(uuid)
}
}
mFilterTrafficData.add(temp)
mFilterTrafficData[uuid] = temp
}
mMarkersCaches[uuid] = temp
trafficDataUuidList.add(uuid)
@@ -165,6 +167,7 @@ class IdentifyOriginDataDrawer : Identify, IMoGoAutopilotStatusListener {
/**
* 清除旧的 marker 数据
*/
@SuppressLint("NewApi")
override fun clearOldMarker() {
for (uuid in trafficDataUuidList) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp())

View File

@@ -15,13 +15,11 @@ import com.mogo.eagle.core.utilcode.geometry.S2CellId;
import com.mogo.eagle.core.utilcode.geometry.S2LatLng;
import com.mogo.map.MogoMarkerManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import mogo.telematics.pad.MessagePad;
@@ -50,15 +48,20 @@ public class TrackManager {
/**
* 记录每次实际绘制的交通元素UUID
*/
private final List<String> trafficDataUuid = Collections.synchronizedList(new ArrayList<>());
@SuppressLint("NewApi")
private final HashMap<String, Long> trafficDataUuid = new HashMap<>();
/**
* 过滤后的数据集合
*/
private final ArrayList<MessagePad.TrackedObject> mFilterTrafficData = new ArrayList<>();
@SuppressLint("NewApi")
public synchronized ArrayList<MessagePad.TrackedObject> filterTrafficData(List<MessagePad.TrackedObject> trafficData) {
private final HashMap<String, MessagePad.TrackedObject> mFilterTrafficData = new HashMap<>();
/**
* 过滤后的数据集合
*/
@SuppressLint("NewApi")
public synchronized HashMap<String, MessagePad.TrackedObject> filterTrafficData(List<MessagePad.TrackedObject> trafficData) {
//清空上次返回数据,做到缓存复用
mFilterTrafficData.clear();
//进入过滤机制的感知物体,首先从缓存队列中进行查找 uuid
@@ -99,10 +102,10 @@ public class TrackManager {
trackObj = new TrackObj(data);
}
}
mFilterTrafficData.add(trackObj.getCache());
mFilterTrafficData.put(uuid, trackObj.getCache());
cellIdCaches.forcePut(uuid, trackObj.getCellIdPos());
mMarkersCaches.put(uuid, trackObj);
trafficDataUuid.add(uuid);
trafficDataUuid.put(uuid, System.currentTimeMillis());
}
return mFilterTrafficData;
}
@@ -121,9 +124,10 @@ public class TrackManager {
}
//清除缓存,删除marker
Iterator it = trafficDataUuid.iterator();
Iterator<Map.Entry<String, Long>> it = trafficDataUuid.entrySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
Map.Entry<String, Long> next = it.next();
String key = next.getKey();
it.remove();
removeKey(key);
}