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 e019b5ca82..3d63facadf 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 @@ -20,8 +20,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS; - public /** * @author congtaowang @@ -258,7 +256,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { } /** - * 绘制某个物体的一个数据 + * 绘制某个物体的一个数据 todo 缓存问题 * * @param recognizedListResult {@link ADASRecognizedResult} * @param newAdasRecognizedMarkersCaches @@ -291,14 +289,16 @@ class AdasRecognizedResultDrawer extends BaseDrawer { final MogoLatLng renderLoc = new MogoLatLng(recognizedListResult.lat, recognizedListResult.lon); long cost = System.currentTimeMillis() - start; final long intervalRef = interval - cost; +// SimpleHandlerThreadPool.getInstance().postRender(() -> { marker.addDynamicAnchorPosition(renderLoc, (float) recognizedListResult.heading, intervalRef); +// }); } else { marker.setRotateAngle(((float) recognizedListResult.heading)); marker.setPosition(recognizedListResult.lat, recognizedListResult.lon); } String carColor = recognizedListResult.color; if (TextUtils.isEmpty(carColor)) { - carColor = getModelRenderColor(recognizedListResult.type, FROM_ADAS, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); + carColor = getModelRenderColor(recognizedListResult.type, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); } marker.setAnchorColor(carColor); @@ -323,10 +323,10 @@ class AdasRecognizedResultDrawer extends BaseDrawer { String carColor = recognizedListResult.color; if (TextUtils.isEmpty(carColor)) { - carColor = getModelRenderColor(recognizedListResult.type, FROM_ADAS, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); + carColor = getModelRenderColor(recognizedListResult.type, 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 +336,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; } @@ -358,6 +358,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { if (mLastPositions != null) { mLastPositions.clear(); } - sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE); + sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_ADAS); } } 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 4789fa73c3..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 @@ -26,7 +26,9 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS; -import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ROAD_UNIT; +import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_MY_LOCATION; +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 @@ -206,47 +208,39 @@ class BaseDrawer { * @param lat 纬度 * @return 实际车辆颜色 */ - protected String getModelRenderColor(int type, int fromType, double speed, double lon, double lat, double angle) { + protected String getModelRenderColor(int type, double speed, double lon, double lat, double angle) { AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom(type); if (recognizedType == AdasRecognizedType.classIdTrafficBus) { return "#D8D8D8FF"; } - if (recognizedType == AdasRecognizedType.classIdUnKnow) { + if (recognizedType == AdasRecognizedType.classIdUnKnow) { //todo unKnow颜色绘制 return Car3DModelColor.Normal.color; } - // 距离策略 todo 此处两种策略是临时方案 -// double[] coordinates = getCurCoordinates(); -// double distance = CoordinateUtils.calculateLineDistance(lon, lat, coordinates[0], coordinates[1]) * 100; -// if (distance < 50) { -// return Car3DModelColor.Dangerous.color; -// } else if (distance < 100 && distance >= 50) { -// return Car3DModelColor.Warming.color; -// } -// -//// 他车车速和自车车速对比速度策略 -//// 自车速度 >= 50% 危险 -//// 10% < 自车速度 < 50% 警告 -// double curSpeed = getCurSpeed(); -// if (curSpeed > 0 && speed > curSpeed) { -// double rate = ((speed - curSpeed) / curSpeed) * 100; -// if (rate >= 50) { -// return Car3DModelColor.Dangerous.color; -// } else if (rate > 10 && rate < 50) { -// return Car3DModelColor.Warming.color; -// } -// } + // 距离策略 + double[] coordinates = getCurCoordinates(); + double distance = CoordinateUtils.calculateLineDistance(lon, lat, coordinates[0], coordinates[1]) * 100; + if (distance < 50) { + return Car3DModelColor.Dangerous.color; + } else if (distance < 100 && distance >= 50) { + return Car3DModelColor.Warming.color; + } + +// 他车车速和自车车速对比速度策略 +// 自车速度 >= 50% 危险 +// 10% < 自车速度 < 50% 警告 + double curSpeed = getCurSpeed(); + if (curSpeed > 0 && speed > curSpeed) { + double rate = ((speed - curSpeed) / curSpeed) * 100; + if (rate >= 50) { + return Car3DModelColor.Dangerous.color; + } else if (rate > 10 && rate < 50) { + return Car3DModelColor.Warming.color; + } + } // 默认颜色 - switch (fromType) { - case FROM_ADAS: - return Car3DModelColor.Normal_Visual.color; - case FROM_ROAD_UNIT: - return Car3DModelColor.Normal_Cloud.color; - default: - return Car3DModelColor.Normal.color; - } -// return Car3DModelColor.Normal.color; + return Car3DModelColor.Normal.color; } /** @@ -298,9 +292,6 @@ class BaseDrawer { public enum Car3DModelColor { Normal("#D8D8D8FF"), - Normal_Visual("#D8CFF8BD"), - Normal_Cloud("#D8F8D69B"), - Warming("#FFD53EFF"), Dangerous("#FF3C45FF"); @@ -476,4 +467,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; + } + } } 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 91123607f8..20bc6015f9 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 @@ -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 @@ -122,7 +120,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 +130,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; @@ -246,7 +244,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } private void removeUselessLastRecord() { // todo 最好重新设计一个数据结构,用于多线程数据过期失效的场景,参见redis数据过期 - if (mLastPositions.isEmpty()) { + if (mLastPositions == null || mLastPositions.isEmpty()) { return; } IMogoADASController adasControllerApi = MogoApisHandler.getInstance().getApis().getAdasControllerApi(); @@ -304,16 +302,10 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic double[] matchLonLat = getMatchLonLat(cloudRoadData.getUuid(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading(), lastLon, lastLat); SocketDownData.CloudRoadDataProto.Builder builder = cloudRoadData.toBuilder(); -// builder.setWgslon(matchLonLat[0]); -// builder.setWgslat(matchLonLat[1]); - builder.setWgslon(56.0); - builder.setWgslat(57.0); + builder.setWgslon(matchLonLat[0]); + builder.setWgslat(matchLonLat[1]); - double lon = cloudRoadData.getWgslon(); - Log.d(TAG, "test lon : " + lon); - - -// cloudRoadData = builder.build(); + cloudRoadData = builder.build(); //todo 验证值是否改变 mLastPositions.put(uniqueKey, cloudRoadData); @@ -329,7 +321,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic marker.setRotateAngle(((float) cloudRoadData.getHeading())); marker.setPosition(cloudRoadData.getWgslat(), cloudRoadData.getWgslon()); } - marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getFromType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading())); + marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading())); if (shouldShowSpeed(cloudRoadData.getType())) { showSelfSpeed(marker, cloudRoadData.getSpeed(), cloudRoadData.getUuid(), cloudRoadData.getType(), MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()); } @@ -433,7 +425,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) @@ -443,7 +435,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic String resIdVal; if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { options.set3DMode(true); - options.anchorColor(getModelRenderColor(data.getType(), data.getFromType(), data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading())); + options.anchorColor(getModelRenderColor(data.getType(), data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading())); int resId = getModelRes(data.getType()); resIdVal = resId + ""; options.resName(mMarkerCachesResMd5Values.get(resIdVal)); @@ -454,7 +446,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())) { @@ -510,7 +502,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } /** - * 展示用户信息面版 + * 展示用户信息米娜版 * * @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 4535a2c389..ee1aa969d7 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 @@ -2,6 +2,8 @@ package com.mogo.module.service.marker; import android.content.Context; import android.graphics.Rect; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import com.mogo.cloud.socket.entity.SocketDownData; @@ -36,11 +38,13 @@ import com.mogo.module.service.network.RefreshModel; import com.mogo.realtime.api.MoGoAiCloudRealTime; import com.mogo.realtime.socket.IMogoCloudOnMsgListener; import com.mogo.service.adas.IMogoADASControlStatusChangedListener; +import com.mogo.service.adas.entity.ADASRecognizedResult; import com.mogo.service.module.IMogoBizActionDoneListener; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.ViewUtils; +import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; import com.zhidao.carchattingprovider.ICallChatResponse; @@ -144,7 +148,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, @Override public void onMsgReceived(SocketDownData.LauncherSnapshotProto mogoSnapshotSetData) { DebugConfig.setStatus(DebugConfig.sDownloadSnapshot, true); - SnapshotSetDataDrawer.getInstance().renderSnapshotData(mogoSnapshotSetData); //todo 6月4号 提测版本中去掉云端下发数据展示 +// SnapshotSetDataDrawer.getInstance().renderSnapshotData(mogoSnapshotSetData); //todo 6月4号 提测版本中去掉云端下发数据展示 // Message msg = mSnapshotHandler.obtainMessage(); // msg.obj = mogoSnapshotSetData; // msg.what = MSG_SNAPSHOT; @@ -154,11 +158,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // adas 每隔一定频率传递过来的数据 MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback(resultList -> { - AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList); // Message msg = mSnapshotHandler.obtainMessage(); // msg.obj = resultList; // msg.what = MSG_ADAS; // msg.sendToTarget(); + AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList); //添加自车的定位图标,碰撞只有一个预警,还需要和adas 联调, // for ( ADASRecognizedResult result : resultList) {