diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XServiceManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XServiceManager.java index 085eb9bdf8..57bb851ec9 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XServiceManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XServiceManager.java @@ -11,7 +11,6 @@ import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.v2x.alarm.V2XCalculateServer; import com.mogo.module.v2x.manager.IMoGoPersonWarnPolylineManager; import com.mogo.module.v2x.manager.IMoGoStopPolylineManager; -import com.mogo.module.v2x.manager.IMoGoV2XCloundDataManager; import com.mogo.module.v2x.manager.IMoGoV2XMarkerManager; import com.mogo.module.v2x.manager.IMoGoV2XPolylineManager; import com.mogo.module.v2x.manager.IMoGoV2XStatusManager; @@ -45,9 +44,6 @@ import com.mogo.service.windowview.IMogoWindowManager; import com.zhidao.carchattingprovider.CallChattingProviderConstant; import com.zhidao.carchattingprovider.ICarsChattingProvider; -import java.util.ArrayList; -import java.util.List; - /** * author : donghongyu * e-mail : 1358506549@qq.com @@ -109,7 +105,6 @@ public class V2XServiceManager { private static IMoGoWarnPolylineManager moGoWarnPolylineManager; private static IMoGoPersonWarnPolylineManager moGoPersonWarnPolylineManager; private static IMoGoStopPolylineManager moGoStopPolylineManager; - private static IMoGoV2XCloundDataManager moGoV2XCloundDataManager; private V2XServiceManager() { @@ -165,7 +160,6 @@ public class V2XServiceManager { moGoV2XMarkerManager = (IMoGoV2XMarkerManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_MARKER_MANAGER).navigation(context); moGoV2XPolylineManager = (IMoGoV2XPolylineManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_POLYLINE_MANAGER).navigation(context); moGoWarnPolylineManager = (IMoGoWarnPolylineManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_WARN_POLYLINE_MANAGER).navigation(context); - moGoV2XCloundDataManager = (IMoGoV2XCloundDataManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_WARN_CLOUND_DATA_MANAGER).navigation(context); moGoPersonWarnPolylineManager = (IMoGoPersonWarnPolylineManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_PERSON_WARN_POLYLINE_MANAGER).navigation(context); moGoStopPolylineManager = (IMoGoStopPolylineManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_STOP_POLYLINE_MANAGER).navigation(context); @@ -337,14 +331,6 @@ public class V2XServiceManager { V2XServiceManager.mIMogoADASController = mIMogoADASController; } - public static IMoGoV2XCloundDataManager getMoGoV2XCloundDataManager() { - return moGoV2XCloundDataManager; - } - - public static void setMoGoV2XCloundDataManager(IMoGoV2XCloundDataManager moGoV2XCloundDataManager) { - V2XServiceManager.moGoV2XCloundDataManager = moGoV2XCloundDataManager; - } - public static IMoGoPersonWarnPolylineManager getMoGoPersonWarnPolylineManager() { return moGoPersonWarnPolylineManager; } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_401013.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_401013.java deleted file mode 100644 index a197aa0819..0000000000 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_401013.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.module.v2x.listener; - -import com.mogo.module.common.entity.V2XWarningEntity; -import com.mogo.service.connection.IMogoOnMessageListener; - -/** - * @author liujing - * @description 车路云—场景预警-云下发数据监听 前车/行人/摩托车/盲区碰撞预警 - * @since: 2021/3/31 - */ -public class V2XMessageListener_401013 implements IMogoOnMessageListener { - @Override - public Class target() { - return null; - } - - @Override - public void onMsgReceived(V2XWarningEntity obj) { - - } -} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoV2XCloundDataManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoV2XCloundDataManager.java deleted file mode 100644 index 9c00da2a52..0000000000 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoV2XCloundDataManager.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.module.v2x.manager; - -import com.alibaba.android.arouter.facade.template.IProvider; -import com.mogo.module.common.entity.V2XWarningEntity; - -/** - * desc: V2X 处理云端预警消息 - */ -public interface IMoGoV2XCloundDataManager extends IProvider { - - /** - * 处理下发数据 - */ - void analysisV2XCloundDataEvent(V2XWarningEntity cloundWarningInfo); - - /** - * 清除 所有的 POI - */ - void clearALLPOI(); - -} 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 deleted file mode 100644 index 0057de52d9..0000000000 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java +++ /dev/null @@ -1,367 +0,0 @@ -package com.mogo.module.v2x.manager.impl; - -import android.content.Context; -import android.location.Location; -import android.util.Log; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.cloud.commons.utils.CoordinateUtils; -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.V2XWarnDataDrawer; -import com.mogo.module.common.entity.V2XWarningEntity; -import com.mogo.module.common.utils.Trigonometric; -import com.mogo.module.service.MarkerServiceHandler; -import com.mogo.module.service.receiver.MogoReceiver; -import com.mogo.module.v2x.MoGoV2XServicePaths; -import com.mogo.module.v2x.V2XConst; -import com.mogo.module.v2x.V2XServiceManager; -import com.mogo.module.v2x.entity.model.DrawLineInfo; -import com.mogo.module.v2x.listener.V2XLocationListener; -import com.mogo.module.v2x.manager.IMoGoV2XCloundDataManager; -import com.mogo.module.v2x.scenario.scene.warning.V2XFrontWarningScenario; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.WorkThreadHandler; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_STOP_LINE_DATA; -import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_WARN_DATA; -import static com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP; -import static com.mogo.module.v2x.V2XServiceManager.getContext; - -/** - * desc : V2X 服务端下发数据处理 点的绘制 - */ -@Route(path = MoGoV2XServicePaths.PATH_V2X_WARN_CLOUND_DATA_MANAGER) -public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMogoCarLocationChangedListener2 { - private static String WARNING_ARROWS = "WARNING_ARROWS"; - private V2XWarningEntity mCloundWarningInfo; - private static String TAG = "MoGoV2XCloundDataManager"; - private boolean isSelfLineClear = true;//绘制线是否已被清除 - private List fillPoints = new ArrayList();//停止线经纬度合集 - private boolean isFirstLocation = false; - private MogoLatLng carLocation = new MogoLatLng( - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(), - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon() - ); - - /* - * 自车前方的点,在停止线上--通过自车位置与距离停止线之间的距离计算 - * */ - private MogoLatLng middleLocationInStopLine; - private V2XFrontWarningScenario mV2XScenario; - - private static long showTime = 4000; - private float bearing; - - - @Override - public void init(Context context) { - MogoApisHandler.getInstance().getApis().getRegisterCenterApi() - .registerCarLocationChangedListener(TAG, this); - } - - @Override - public void analysisV2XCloundDataEvent(V2XWarningEntity cloundWarningInfo) { - if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { - mCloundWarningInfo = cloundWarningInfo; - showTime = mCloundWarningInfo.getShowTime(); - pointsBetween(); - bearing = V2XLocationListener.getInstance().getLastCarLocation().getBearing(); - - //顶部弹框 - if (mV2XScenario == null) { - mV2XScenario = new V2XFrontWarningScenario(); - } -// mV2XScenario.setWarningEntity(cloundWarningInfo); - mV2XScenario.init(null); - //预警蒙层 - MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(cloundWarningInfo.getDirection(), MogoReceiver.ACTION_V2X_FRONT_WARNING); - isSelfLineClear = false; - isFirstLocation = false; - V2XServiceManager.getMarkerManager().removeMarkers(WARNING_ARROWS); - if (cloundWarningInfo.getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP) { //前方 TODO - middleLocationInStopLine = getMiddleLocationInStopLine(); - //如果是正前方类型,红色绘制区域从停止线向前绘制50米 - MogoLatLng warningLocation = Trigonometric.getNewLocation(middleLocationInStopLine, 50, cloundWarningInfo.getAngle()); - //停止线前方画线 - WorkThreadHandler.getInstance().postDelayed(() -> { - //二轮车和行人的渲染和移动 - V2XServiceManager.getMarkerManager().removeMarkers(TYPE_MARKER_CLOUD_WARN_DATA); - V2XWarnDataDrawer.getInstance().renderWarnData(cloundWarningInfo); - //绘制识别物与交汇点连线,并且更新连线数据 - drawRedWarningLineFrontOfStopLine(cloundWarningInfo, middleLocationInStopLine, warningLocation); - //添加停止线marker - handleStopLine(); - //自车画线 - drawSelfCarLine(carLocation.lon, carLocation.lat, bearing); - }, 500); - - UiThreadHandler.postDelayed(() -> { - V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); - V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); - V2XServiceManager.getMoGoStopPolylineManager().clearLine(); - isSelfLineClear = true; - }, showTime); - - } else { //左侧或者右侧 - WorkThreadHandler.getInstance().postDelayed(() -> { - //绘制识别物与交汇点连线,并且更新连线数据 - drawOtherObjectLine(cloundWarningInfo); - //二轮车和行人的渲染和移动 - V2XServiceManager.getMarkerManager().removeMarkers(TYPE_MARKER_CLOUD_WARN_DATA); - V2XWarnDataDrawer.getInstance().renderWarnData(cloundWarningInfo); - - //车辆静止的时候 - drawSelfCarLine(carLocation.lon, carLocation.lat, bearing); - - }, 500); - - //延迟3秒清理线 - UiThreadHandler.postDelayed(() -> { - V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); - V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); - isSelfLineClear = true; - }, showTime); - } - } - } - - /** - * 自车为起点绘制(根据设计,前方行人/弱势交通参与者预警 getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP自车与停止线之间为蓝色预警;其他侧方预警自车与预碰撞点之间显示红色预警) - */ - private void drawSelfCarLine(double lon, double lat, float bearing) { - if (!isSelfLineClear) { - IMogoPolyline mogoPolyline = V2XServiceManager.getMoGoWarnPolylineManager().getMogoWarnPolyline(); - if (mCloundWarningInfo != null) { - MogoLatLng startLatlng = null; - MogoLatLng endLatlng = null; - MogoLatLng addMiddleLoc = null; - - if (!isFirstLocation) { - carLocation = getMogoLat(new MogoLatLng(lat, lon)); - isFirstLocation = true; - } - //绘制线的终点(在停止线上或者预碰撞点上) - - endLatlng = new MogoLatLng(mCloundWarningInfo.getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP ? middleLocationInStopLine.lat : mCloundWarningInfo.getCollisionLat(), - mCloundWarningInfo.getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP ? middleLocationInStopLine.lon : mCloundWarningInfo.getCollisionLon()); - //自车位置 - startLatlng = new MogoLatLng(lat, lon); - float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat); - //扩展点为了渐变色添加 - addMiddleLoc = Trigonometric.getNewLocation(startLatlng, distance / 2, Trigonometric.getAngle(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat)); - Log.d(TAG, "自车为起点绘制 自车;" + startLatlng.lon + "," + startLatlng.lat + - "中间扩展点" + addMiddleLoc.lon + "," + addMiddleLoc.lat + "终点:" + endLatlng.lon + "," + endLatlng.lat); - - if (mogoPolyline != null) { - mogoPolyline.setPoints(Arrays.asList(startLatlng, addMiddleLoc, endLatlng)); - mogoPolyline.setTransparency(0.5f); - } else { - DrawLineInfo info = new DrawLineInfo(); // 对象 - Log.d(TAG, "安全区域的画线点为" + "起点:" + startLatlng + "中间点:" + addMiddleLoc + "终点:" + endLatlng); - List locations = new ArrayList(); - locations.add(startLatlng); - locations.add(addMiddleLoc); - locations.add(endLatlng); - info.setLocations(locations); - info.setHeading(bearing); - info.setWidth(mCloundWarningInfo.getRoadwidth() * 14 + 5); - info.setDirection(mCloundWarningInfo.getDirection()); - V2XServiceManager.getMoGoWarnPolylineManager().drawWarnPolyline(getContext(), info); - } - } else { - V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); - } - } - } - - /* - * 停止线绘制 - * */ - private void handleStopLine() { - try { - if (mCloundWarningInfo != null) { - V2XServiceManager.getMarkerManager().removeMarkers(TYPE_MARKER_CLOUD_STOP_LINE_DATA); - for (int i = 0; i < fillPoints.size(); i++) { - V2XWarningEntity entity = new V2XWarningEntity(); - MogoLatLng latLng = (MogoLatLng) fillPoints.get(i); - entity.setLat(latLng.lat); - entity.setLon(latLng.lon); - entity.heading = mCloundWarningInfo.heading; - V2XWarnDataDrawer.getInstance().renderStopLineData(entity); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 场景如:车辆行驶正前方绘制红色区域(停止线继续前行的预警区域) TODO 需要实时给行人当前位置 - */ - private void drawRedWarningLineFrontOfStopLine(V2XWarningEntity info, MogoLatLng - startLatLng, MogoLatLng mogoLatLng) { - if (info != null) { - IMogoPolyline polyLine = V2XServiceManager.getMoGoStopPolylineManager().getMogoStopPolyline(); - MogoLatLng endLatlng = new MogoLatLng(mogoLatLng.lat, mogoLatLng.lon); - float distance = CoordinateUtils.calculateLineDistance(startLatLng.lon, startLatLng.lat, endLatlng.lon, endLatlng.lat); - MogoLatLng addMiddleLoc = Trigonometric.getNewLocation(startLatLng, distance / 2, mCloundWarningInfo.getAngle()); - Log.d(TAG, "红色区域起始点 = " + startLatLng.lon + "," + startLatLng.lat + - "中间点坐标:" + addMiddleLoc.lon + "," + addMiddleLoc.lat - + "终点" + endLatlng.lon + "," + endLatlng.lat); - if (polyLine != null) { - Log.d(V2XConst.LOG_NAME_WARN, "drawStopLine polyLine != null"); - polyLine.setPoints(Arrays.asList(startLatLng, addMiddleLoc, endLatlng)); - polyLine.setTransparency(0.5f); - } else { - DrawLineInfo lineInfo = new DrawLineInfo(); - List locations = new ArrayList(); - locations.add(startLatLng); - locations.add(addMiddleLoc); - locations.add(endLatlng); - lineInfo.setLocations(locations); - lineInfo.setHeading(info.heading); - Log.d(V2XConst.LOG_NAME_WARN, "drawStopLine width = " + info.getRoadwidth()); - lineInfo.setWidth(info.getRoadwidth() * 14 + 5); - V2XServiceManager.getMoGoStopPolylineManager().drawStopPolyline(getContext(), lineInfo); - } - } else { - V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); - V2XServiceManager.getMoGoStopPolylineManager().clearLine(); - } - } - - - /** - * 侧方目标物与预碰撞点连线,并且更新数据 TODO 需要实时给行人当前位置 - */ - private void drawOtherObjectLine(V2XWarningEntity info) { - if (info != null) { - IMogoPolyline polyLine = V2XServiceManager.getMoGoPersonWarnPolylineManager().getMogoPersonWarnPolyline(); - MogoLatLng startLatlng = new MogoLatLng(info.getLat(), info.getLon());//识别物坐标 - MogoLatLng endLatlng = new MogoLatLng(info.getCollisionLat(), info.getCollisionLon());//预碰撞点坐标 - float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat);//识别物到碰撞点之间的距离 - MogoLatLng addMiddleLoc = Trigonometric.getNewLocation(startLatlng, distance / 2, - Trigonometric.getAngle(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat));//补点 - if (polyLine != null) { - Log.d(V2XConst.LOG_NAME_WARN, "polyLine != null"); - polyLine.setPoints(Arrays.asList(startLatlng, addMiddleLoc, endLatlng)); - polyLine.setTransparency(0.5f); - } else { - DrawLineInfo lineInfo = new DrawLineInfo(); - Log.d(TAG, "目标物与预碰撞点画线点为" + "起点:" + startLatlng + "中间点:" + addMiddleLoc + "终点:" + endLatlng); - List locations = new ArrayList(); - locations.add(startLatlng); - locations.add(addMiddleLoc); - locations.add(endLatlng); - lineInfo.setLocations(locations); - lineInfo.setHeading(info.heading); - Log.d(V2XConst.LOG_NAME_WARN, "drawOtherObjectLine width = " + info.getRoadwidth()); - lineInfo.setWidth(info.getRoadwidth() * 14 + 5); - V2XServiceManager.getMoGoPersonWarnPolylineManager().drawPersonWarnPolyline(getContext(), lineInfo); - //识别物到预碰撞点之间的箭头 - addArrows(startLatlng, endLatlng); - } - } else { - Log.e(V2XConst.LOG_NAME_WARN, "info == null"); - V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); - } - } - - //侧面目标物与碰撞点之间添加多个小箭头 - private void addArrows(MogoLatLng startLatLng, MogoLatLng endLatLng) { - float distance = CoordinateUtils.calculateLineDistance( - startLatLng.lon, startLatLng.lat, endLatLng.lon, endLatLng.lat); - double rotate = Trigonometric.getAngle(startLatLng.lon, startLatLng.lat, endLatLng.lon, endLatLng.lat); - Log.d(TAG, "添加小箭头--目标物与预碰撞点之间的距离是" + String.valueOf(distance)); - if (distance > 5) { - int count = (int) (distance / 5); - for (int i = 0; i < count; i++) { - MogoLatLng newLo = Trigonometric.getNewLocation( - startLatLng, 5 * (i + 1), Trigonometric.getAngle(startLatLng.lon, startLatLng.lat, endLatLng.lon, endLatLng.lat)); - Log.d(TAG, "小箭头位置" + newLo); - V2XWarnDataDrawer.getInstance().drawerArrowsMarkerWithLocation(newLo, WARNING_ARROWS, 10, new Double(rotate).intValue()); - } - } - //延迟3秒清理线 - UiThreadHandler.postDelayed(() -> { - V2XServiceManager.getMarkerManager().removeMarkers(WARNING_ARROWS); - }, showTime); - - } - - @Override - public void clearALLPOI() { - - } - - - /** - * 自车定位 移动完成需要 3s消失,这里何时清理,应该是没有数据的时候 - * 地图侧回调回的定位Location为高德坐标 - */ - @Override - public void onCarLocationChanged2(Location latLng) { - if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() && isSelfLineClear == false) { - //当行人经纬度交点 开始画线,否则清理 - if (mCloundWarningInfo != null) { - mCloundWarningInfo.setCarLocation(new MogoLatLng(latLng.getLatitude(), latLng.getLongitude())); - } - drawSelfCarLine(latLng.getLongitude(), latLng.getLatitude(), latLng.getBearing()); - } - carLocation = new MogoLatLng(latLng.getLatitude(), latLng.getLongitude()); - Log.d("车行驶的轨迹---", String.valueOf(latLng.getLongitude()) + "," + String.valueOf(latLng.getLatitude())); - } - - @Override - public void onCarLocationChanged(MogoLatLng latLng) { - } - - - /** - * 补点后的停止线经纬度合集 - */ - public void pointsBetween() { - try { - fillPoints.clear(); - List stopLines = mCloundWarningInfo.getStopLines(); - if (stopLines.size() > 1) { - MogoLatLng x = mCloundWarningInfo.getStopLines().get(0); - MogoLatLng y = mCloundWarningInfo.getStopLines().get(1); - //两点间的距离 - float distance = CoordinateUtils.calculateLineDistance(x.lon, x.lat, y.lon, y.lat); - float average = distance / 3; - //两点间的角度 - double angle = Trigonometric.getAngle(x.lon, x.lat, y.lon, y.lat); - //根据距离和角度获取下个点的经纬度 - fillPoints.add(x); - for (int i = 1; i < 3; i++) { - MogoLatLng newLocation = Trigonometric.getNewLocation(x, average * i, angle); - fillPoints.add(newLocation); - } - fillPoints.add(y); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private MogoLatLng getMogoLat(MogoLatLng latlng) { - MogoLatLng newLocation = Trigonometric.getNewLocation(latlng, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getAngle()); - return newLocation; - } - - /* - * 自车前方的点,在停止线上--通过自车位置与距离停止线之间的距离计算 - * */ - private MogoLatLng getMiddleLocationInStopLine() { - MogoLatLng newLocation = Trigonometric.getNewLocation(carLocation, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getAngle()); - return newLocation; - } -}