diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 4ff10f68a5..83405b8de1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -91,7 +91,6 @@ diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java index bce9c3fdc7..07dfb1fbb2 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java @@ -18,6 +18,11 @@ class DataTypes { */ public static final String TYPE_MARKER_CLOUD_DATA = "TYPE_MARKER_CLOUD_DATA"; + /** + * 云端下发数据 + */ + public static final String TYPE_MARKER_CLOUD_WARN_DATA = "TYPE_MARKER_CLOUD_WARN_DATA"; + /** * Push 事件场景 VR */ 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 9834fa2002..305520801b 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 @@ -143,43 +143,39 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic * @param data 道路数据 * @return {@link IMogoMarker} */ -// public IMogoMarker drawWarnDataMarker( V2XWarningEntity data ) { -// if ( data == null ) { -// return null; -// } -// -// MogoMarkerOptions options = new MogoMarkerOptions() -// .owner( DataTypes.TYPE_MARKER_CLOUD_DATA ) -// .anchor( 0.5f, 0.5f ) -// .rotate( ( float ) data.getHeading() ) -// .object( data ) -// .gps( true ) -// .controlAngle( true ) -// .position( new MogoLatLng( data.getWgslat(), data.getWgslon() ) ); -// String resIdVal = null; -// if ( MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { -// options.set3DMode( true ); -// // TODO: 2021/3/23 后端算法提供显示颜色 -// options.anchorColor( getModelRenderColor( data.getType(), data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading() ) ); -// int resId = getModelRes( data.getType() ); -// resIdVal = resId + ""; + public IMogoMarker drawWarnDataMarker( V2XWarningEntity data ) { + if ( data == null ) { + return null; + } + + MogoMarkerOptions options = new MogoMarkerOptions() + .owner( DataTypes.TYPE_MARKER_CLOUD_DATA ) + .anchor( 0.5f, 0.5f ) + .rotate( ( float ) data.getHeading() ) + .object( data ) + .gps( true ) + .controlAngle( true ) + .position( new MogoLatLng( data.getLat(), data.getLon())); + + String resIdVal = null; + if ( MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { + options.set3DMode( true ); + options.anchorColor(data.color); + int resId = getModelRes( data.getType() ); + resIdVal = resId + ""; // options.resName( mMarkerCachesResMd5Values.get( resIdVal ) ); -// options.icon3DRes( resId ); -// } else { + options.icon3DRes( resId ); + } else { // options.set3DMode( false ); // View view = inflateView( data ); // options.icon( view ); // resIdVal = view.getId() + ""; -// } -// IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_CLOUD_DATA, options ); + } + IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_CLOUD_DATA, options ); // cacheMarkerIconResMd5Val( resIdVal, marker ); -// -// if ( !TextUtils.isEmpty( data.getSn() ) ) { -// bindClickListener( marker ); -// } -// -// return marker; -// } + + return marker; + } /** @@ -187,17 +183,14 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic * @param data */ // public void renderWarnData(V2XWarningEntity data ) { -// // IMogoMarker marker = drawWarnDataMarker(data); // // if ( marker == null ) { // continue; // } // -// // renderSnapshotOneFrame( marker, uniqueKey, cloudRoadData, newMarkersCaches ); // -// // } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java index f6178c986d..2e3dd68156 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java @@ -303,7 +303,6 @@ public class V2XModuleProvider implements V2XServiceManager.getV2XMarkerService().startAutoRefresh(); // 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随 V2XServiceManager.getMapUIController().recoverLockMode(); - Log.d(V2XConst.LOG_NAME_WARN, "V2XModuleProvider ------> "); //注册adas数据通道 V2XWaringManager.getInstance().registerAdasSocketMessage(mContext); } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java index 2dc4c068fe..d7247e54cc 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java @@ -56,7 +56,7 @@ public class V2XWaringManager { //根据云端,绘制自车和交点,以及行人或二轮车与交点的绘制 registerWarnListener(); - handleAdasData(); +// handleAdasData(); } /** @@ -92,26 +92,35 @@ public class V2XWaringManager { /** * 处理adas返回的数据 */ - private void handleAdasData() { - Log.d(V2XConst.LOG_NAME_WARN, "V2XWaringManager ---- handleAdasData "); + public void handleAdasData() { + Logger.d(V2XConst.LOG_NAME_WARN, "V2XWaringManager ---- handleAdasData "); - // 绘制连接线 TODO 来的是列表数据 + // 绘制连接线 DrawLineInfo info1 = new DrawLineInfo(); MogoLatLng startLatlng1 = new MogoLatLng(39.968919,116.407642); MogoLatLng endLatlng1 = new MogoLatLng(40.010906,116.423821); + info1.setHeading(10); info1.setStartLocation(startLatlng1); info1.setEndLocation(endLatlng1); + +// if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { +// float roadWidth = V2XServiceManager.getMapUIController().getRoadWidth(116.411194781192, +// 39.9808395231999, 10, true, true); +// Log.d(V2XConst.LOG_NAME_WARN, "roadWidth = " + roadWidth); +// info1.setWidth(roadWidth); +// } + V2XServiceManager.getMoGoWarnPolylineManager().drawWarnPolyline(getContext(), info1); // adas 每隔一秒传递的他车或行人数据 V2XServiceManager.getmIMogoADASController().addAdasRecognizedDataCallback(resultList -> { - // 绘制近景识别到的车辆,行人和二轮车 TODO + // 绘制近景识别到的车辆,行人和二轮车 AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult( resultList ); //清理 V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); - // 绘制连接线 TODO 来的是列表数据 + // 绘制连接线 DrawLineInfo info = new DrawLineInfo(); MogoLatLng startLatlng = new MogoLatLng(39.969247,116.407299); MogoLatLng endLatlng = new MogoLatLng(39.971089,116.407384); @@ -133,15 +142,6 @@ public class V2XWaringManager { double lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); Log.d(V2XConst.LOG_NAME_WARN, "lon = " + lon + "----lat = " + lat); - //绘制自车数据 liyz -// DrawLineInfo info = new DrawLineInfo(); -// MogoLatLng startLatlng = new MogoLatLng(lat,lon); //我的位置 -// MogoLatLng endLatlng = new MogoLatLng(39.971089,); //交点位置 -// info.setStartLocation(startLatlng); -// info.setEndLocation(endLatlng); -// V2XServiceManager.getMoGoWarnPolylineManager().drawableWarnPolyline(mContext, info); - - } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/model/DrawLineInfo.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/model/DrawLineInfo.java index d18ba99ee7..e6a68b6331 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/model/DrawLineInfo.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/model/DrawLineInfo.java @@ -20,6 +20,8 @@ public class DrawLineInfo { private double heading; + private float width; + public String getType() { return type; } @@ -51,4 +53,12 @@ public class DrawLineInfo { public void setHeading(double heading) { this.heading = heading; } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoPersonWarnPolylineManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoPersonWarnPolylineManager.java index 19c96ecc65..43e5a4eb06 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoPersonWarnPolylineManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoPersonWarnPolylineManager.java @@ -25,6 +25,10 @@ public class MoGoPersonWarnPolylineManager implements IMoGoPersonWarnPolylineMan @Override public void drawPersonWarnPolyline(Context context, DrawLineInfo info) { + if (info == null) { + return; + } + try { if (mMogoPolyline != null) { mMogoPolyline.remove(); @@ -33,24 +37,26 @@ public class MoGoPersonWarnPolylineManager implements IMoGoPersonWarnPolylineMan // 连接线参数 MogoPolylineOptions options = new MogoPolylineOptions(); - float roadWidth = V2XServiceManager.getMapUIController().getRoadWidth(info.getStartLocation().lon, - info.getStartLocation().lat, (float) info.getHeading(), true, true); - // 渐变色 List colors = new ArrayList<>(); - if (info.getType().equals("1")) { //预警 TODO - colors.add(0xFFFFA31A); - colors.add(0xFFFFA31A); + if (info.getType() != null) { + if (info.getType().equals("1")) { //预警 TODO + colors.add(0xFFFFA31A); + colors.add(0xFFFFA31A); + } else { + colors.add(0xFFE32F46); + colors.add(0xFFE32F46); + } } else { colors.add(0xFFE32F46); colors.add(0xFFE32F46); } // 线条粗细,渐变,渐变色值 - Log.d(V2XConst.LOG_NAME_WARN, "MoGoPersonWarnPolylineManager roadWidth = " + roadWidth); - options.width(roadWidth).useGradient(true).colorValues(colors); -// options.width(60).useGradient(true).colorValues(colors); +// Logger.d(V2XConst.LOG_NAME_WARN, "MoGoPersonWarnPolylineManager roadWidth = " + roadWidth); + options.width(60).useGradient(true).colorValues(colors); +// options.width(info.getWidth()).useGradient(true).colorValues(colors); // 当前车辆位置 options.add(info.getStartLocation()); // 目标车辆位置 diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java index 420e8da55e..ebd2cbacb5 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java @@ -8,6 +8,7 @@ import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.MogoLatLng; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.overlay.IMogoPolyline; +import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.drawer.SnapshotSetDataDrawer; import com.mogo.module.common.entity.V2XWarningEntity; import com.mogo.module.v2x.MoGoV2XServicePaths; @@ -29,7 +30,6 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog @Override public void init(Context context) { - } @Override @@ -42,7 +42,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog drawOtherObjectLine(cloundWarningInfo); //二轮车和行人的移动和渲染 -// SnapshotSetDataDrawer.getInstance().renderSnapshotData(); +// SnapshotSetDataDrawer.getInstance().renderWarnData(cloundWarningInfo); } @@ -64,6 +64,14 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog lineInfo.setStartLocation(startLatlng); lineInfo.setEndLocation(endLatlng); lineInfo.setHeading(info.heading); + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { +// float roadWidth = V2XServiceManager.getMapUIController().getRoadWidth(116.411194781192, +// 39.9808395231999, 10, true, true); + float roadWidth = V2XServiceManager.getMapUIController().getRoadWidth(info.getLon(), + info.getLat(), (float) info.heading, true, true); + Log.d(V2XConst.LOG_NAME_WARN, "roadWidth = " + roadWidth); + lineInfo.setWidth(roadWidth); + } V2XServiceManager.getMoGoPersonWarnPolylineManager().drawPersonWarnPolyline(getContext(), lineInfo); } } else { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoWarnPolylineManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoWarnPolylineManager.java index 07cf944aee..9752a13441 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoWarnPolylineManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoWarnPolylineManager.java @@ -38,12 +38,11 @@ public class MoGoWarnPolylineManager implements IMoGoWarnPolylineManager { mMogoPolyline.remove(); } + Log.d(V2XConst.LOG_NAME_WARN, "MoGoWarnPolylineManager --------> "); + // 连接线参数 MogoPolylineOptions options = new MogoPolylineOptions(); -// float roadWidth = V2XServiceManager.getMapUIController().getRoadWidth(info.getStartLocation().lon, -// info.getStartLocation().lat, (float) info.getHeading(), true, true); - List colors = new ArrayList<>(); if (info.getType() != null) { @@ -63,7 +62,7 @@ public class MoGoWarnPolylineManager implements IMoGoWarnPolylineManager { // Log.d(V2XConst.LOG_NAME_WARN, "MoGoWarnPolylineManager roadWidth = " + roadWidth); // 线条粗细,渐变,渐变色值 options.width(60).useGradient(true).colorValues(colors); -// options.width(roadWidth).useGradient(true).colorValues(colors); +// options.width(info.getWidth()).useGradient(true).colorValues(colors); // 当前车辆位置 options.add(info.getStartLocation()); // 目标车辆位置 diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/AdasDataBroadcastReceiver.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/AdasDataBroadcastReceiver.java index 62905c22a0..2939319bae 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/AdasDataBroadcastReceiver.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/AdasDataBroadcastReceiver.java @@ -23,7 +23,10 @@ public class AdasDataBroadcastReceiver extends BroadcastReceiver { // Logger.d(V2XConst.LOG_NAME_WARN, "AdasDataBroadcastReceiver -->" + GsonUtil.jsonFromObject(adasResult)); String adasResult = (String) intent.getSerializableExtra(V2XConst.BROADCAST_ADAS_EXTRA_KEY); Log.d(V2XConst.LOG_NAME_WARN, "AdasDataBroadcastReceiver -----> "); - V2XWaringManager.getInstance().registerAdasSocketMessage(context); +// V2XWaringManager.getInstance().registerAdasSocketMessage(context); + V2XWaringManager.getInstance().handleAdasData(); + + } catch (Exception e) { e.printStackTrace(); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java index f365363897..f2492e97ba 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java @@ -1,6 +1,7 @@ package com.mogo.module.v2x.scenario.scene.warning; import android.content.Context; + import com.mogo.map.MogoLatLng; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; @@ -16,6 +17,10 @@ import com.mogo.module.v2x.entity.model.DrawLineInfo; import com.mogo.module.v2x.scenario.view.IV2XMarker; import com.mogo.utils.WorkThreadHandler; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; + /** * @author liujing * @description 描述 @@ -40,23 +45,14 @@ public class V2XWarningMarker implements IV2XMarker { if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { clearPOI(); WorkThreadHandler.getInstance().postDelayed(() -> { - MogoMarkerOptions options = new MogoMarkerOptions() - .object(markerShowEntity) - .latitude(markerShowEntity.getMarkerLocation().getLat()) - .longitude(markerShowEntity.getMarkerLocation().getLon()); - IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); - options.icon3DRes(com.mogo.module.service.R.raw.people); - options.anchorColor("#FF4040"); - IMogoMarker marker = V2XServiceManager.getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); - iMarkerView.setMarker(marker); - marker.setToTop(); + IMogoMarker marker = drawMarker(markerShowEntity); + //如果有预警碰撞点,识别物与预警碰撞点之间连线,并执行平移动画 + if (mMarkerEntity.getCollisionLat() > 0 && mMarkerEntity.getCollisionLon() != 0) { + drawLine(); + smooth(marker); + } }, 0); - //如果有预警碰撞点,识别物与预警碰撞点之间连线,并执行平移动画 - if (mMarkerEntity.getCollisionLat() > 0 && mMarkerEntity.getCollisionLon() != 0) { - drawLine(); - smooth(); - } } else { } @@ -66,6 +62,20 @@ public class V2XWarningMarker implements IV2XMarker { } + public IMogoMarker drawMarker(MarkerShowEntity markerShowEntity) { + MogoMarkerOptions options = new MogoMarkerOptions() + .object(markerShowEntity) + .latitude(markerShowEntity.getMarkerLocation().getLat()) + .longitude(markerShowEntity.getMarkerLocation().getLon()); + IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); + options.icon3DRes(com.mogo.module.service.R.raw.people); + options.anchorColor("#FF4040"); + IMogoMarker marker = V2XServiceManager.getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); + iMarkerView.setMarker(marker); + marker.setToTop(); + return marker; + } + public void drawLine() { DrawLineInfo drawLineInfo = new DrawLineInfo(); MogoLatLng slatLng = new MogoLatLng(mMarkerEntity.getLat(), mMarkerEntity.getLon()); @@ -75,12 +85,25 @@ public class V2XWarningMarker implements IV2XMarker { V2XServiceManager.getMoGoWarnPolylineManager().drawWarnPolyline(mContext, drawLineInfo); } - public void smooth() { + public void smooth(IMogoMarker marker) { + List latLngs = new ArrayList<>(); + MogoLatLng sLocation = new MogoLatLng(mMarkerEntity.getLat(), mMarkerEntity.getLon()); + MogoLatLng endLocation = new MogoLatLng(mMarkerEntity.getCollisionLat(), mMarkerEntity.getCollisionLon()); + latLngs.add(sLocation); + latLngs.add(endLocation); + marker.startSmoothInMs(latLngs, 3000); + WorkThreadHandler.getInstance().postDelayed(() -> { + clearLine(); + }, 3_000); } @Override public void clearPOI() { V2XServiceManager.getMarkerManager().removeMarkers(V2XConst.V2X_FRONT_WARNING_MARKER); } + + public void clearLine() { + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + } } diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_warning_event_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_warning_event_data.json index d514923ffe..d04415ae80 100644 --- a/modules/mogo-module-v2x/src/main/res/raw/scenario_warning_event_data.json +++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_warning_event_data.json @@ -3,16 +3,16 @@ "lat":39.977148, "lon":116.417478, "distance": 2.22, - "collisionLat": 39.977131, - "collisionLon": 116.417741, + "collisionLat": 39.977094, + "collisionLon": 116.417634, "from": 1, "angle": 120, "direction": 10014, "speed":11.108121, "targetColor": "#FF4040", "stopLineDistance":20, - "stopLineLat": 39.977123, - "stopLineLon": 116.417537, + "stopLineLat": 39.977094, + "stopLineLon": 116.417634, "warningContent": "小心行人", "heading": 30 } \ No newline at end of file