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 b47e91b9db..4e9a68bff1 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 @@ -203,24 +203,25 @@ class AdasRecognizedResultDrawer extends BaseDrawer { } private void removeUselessLastRecord() { // todo 最好重新设计一个数据结构,用于多线程数据过期失效的场景,参见redis数据过期 - if (mLastPositions == null || mLastPositions.isEmpty()) { - return; - } - IMogoADASController adasControllerApi = MogoApisHandler.getInstance().getApis().getAdasControllerApi(); - if (TextUtils.isEmpty(adasControllerApi.getSatelliteTime()) || adasControllerApi.getSatelliteTime().equals("0")) { + if (mLastPositions.isEmpty()) { return; } Iterator iterator = mLastPositions.values().iterator(); Log.d("EmArrow","removeUselessLastRecord size : " + mLastPositions.size()); while (iterator.hasNext()) { ADASRecognizedResult result = iterator.next(); - long internal = result.satelliteTime - Long.parseLong(adasControllerApi.getSatelliteTime()); + long internal = result.satelliteTime - getCurSatelliteTime(); if (internal > 1000) { iterator.remove(); } } } + /** + * 过滤无用数据 + * @param recognizedListResult {@link ADASRecognizedResult} + * @return useless + */ private boolean isUselessValue(ADASRecognizedResult recognizedListResult) { if (recognizedListResult == null) { return true; @@ -228,18 +229,14 @@ class AdasRecognizedResultDrawer extends BaseDrawer { if (!isRenderType(recognizedListResult.type)) { return true; } - String uniqueKey = recognizedListResult.uuid; - if (TextUtils.isEmpty(uniqueKey)) { - return true; - } - return false; + return TextUtils.isEmpty(uniqueKey); } /** * 绘制某个物体的一个数据 todo 缓存问题 * - * @param recognizedListResult + * @param recognizedListResult {@link ADASRecognizedResult} * @param newAdasRecognizedMarkersCaches */ private void renderAdasOneFrame(IMogoMarker marker, 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 a9456f6794..af0347fb43 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 @@ -248,7 +248,7 @@ class BaseDrawer { * * @return isCurSpeed */ - private double getCurSpeed() { + protected double getCurSpeed() { double speed = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastSpeed(); if (speed <= 0) { speed = SnapshotLocationController.getInstance().getCurSpeed(); @@ -259,9 +259,9 @@ class BaseDrawer { /** * 返回当前自车经纬度 * - * @return + * @return 0:lon 1:lat */ - private double[] getCurCoordinates() { + protected double[] getCurCoordinates() { double[] coordinates = { MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(), MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(), @@ -273,6 +273,18 @@ class BaseDrawer { return coordinates; } + /** + * 返回当前自车SNTP时间 + * + * @return + */ + protected long getCurSatelliteTime() { + String satelliteTime = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getSatelliteTime(); + if (TextUtils.isEmpty(satelliteTime)) { + return System.currentTimeMillis(); + } + return Long.parseLong(satelliteTime); + } /** * 模型颜色 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 b829256bbd..81763cda2c 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 @@ -1,5 +1,6 @@ package com.mogo.module.common.drawer; +import android.os.Build; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -17,8 +18,8 @@ import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.R; import com.mogo.module.common.api.CallChatApi; import com.mogo.module.common.constants.DataTypes; +import com.mogo.module.common.utils.Trigonometric; import com.mogo.service.adas.IMogoADASController; -import com.mogo.service.adas.entity.ADASRecognizedResult; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.ViewUtils; @@ -246,7 +247,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic return; } Iterator iterator = mLastPositions.values().iterator(); - Log.d("EmArrow","removeUselessLastRecord size : " + mLastPositions.size()); + Log.d("EmArrow", "removeUselessLastRecord size : " + mLastPositions.size()); while (iterator.hasNext()) { SocketDownData.CloudRoadDataProto result = iterator.next(); long internal = result.getSatelliteTime() - Long.parseLong(adasControllerApi.getSatelliteTime()); @@ -328,9 +329,8 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic * @param out 输出集合 */ private void prepareData(List in, List out) { -// in.stream(). -// filterData(in); -// foreCastPoint(in); + filterData(in); + foreCastPoint(in); out.addAll(in); } @@ -358,6 +358,32 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic data.addAll(newList); } + private void foreCastPoint(List in) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + for (SocketDownData.CloudRoadDataProto proto : in) { + SocketDownData.CloudRoadDataProto.Builder builder = proto.toBuilder(); + long internal = getCurSatelliteTime() - builder.getSatelliteTime(); + if (internal <= 0) { + continue; + } + long startTime = System.nanoTime(); + // 预测点 + double foreCastDistance = proto.getSpeed() * internal; + MogoLatLng mogoLatLng = new MogoLatLng(proto.getWgslat(),proto.getWgslon()); + MogoLatLng foreCastMogoLatLon = Trigonometric.getNewLocation(mogoLatLng,foreCastDistance,proto.getHeading()); + + // 计算与自车距离 +// getCurCoordinates(); + + long foreCastInternal = System.nanoTime() - startTime; + Log.d("ForeCastTime","foreCastInternal :" + foreCastDistance); //todo 看是否耗时,增加的时间需要从当前SNTP时间减去 + builder.setWgslat(foreCastMogoLatLon.getLat()); + builder.setWgslon(foreCastMogoLatLon.getLon()); + builder.setSatelliteTime(getCurSatelliteTime() - foreCastInternal); + } + } + } + /** * 绑定点击事件 */