diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java index 215ada4cc2..f7033b08b7 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java @@ -104,8 +104,8 @@ public class OchBusPresenter extends Presenter< OchBusFragment > implements IMog double lat = 40.1974932972; double lon = 116.7354579447; -// lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); -// lon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(); + lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); + lon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(); OchBusRoutesRequest request = new OchBusRoutesRequest( Utils.getSn(), lat, lon ); RequestBody requestBody = RequestBody.create( MediaType.get( "application/json;charset=UTF-8" ), GsonUtil.jsonFromObject( request ) ); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java index a38bbb0632..d86d0213d8 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java @@ -71,8 +71,8 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL */ public void renderWarnData(V2XWarningEntity data) { MarkerLocation location = new MarkerLocation(); - location.setLat(data.getLat()); - location.setLon(data.getLon()); + location.setLat(data.getDirection() == 1 ? data.getStopLines().get(0).lat : data.getLat()); + location.setLon(data.getDirection() == 1 ? data.getStopLines().get(0).lon : data.getLon()); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); markerShowEntity.setMarkerLocation(location); @@ -80,7 +80,9 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL IMogoMarker marker = drawMarker(markerShowEntity); Log.d("liyz", "renderWarnData marker != null "); - marker.addDynamicAnchorPosition(new MogoLatLng(data.getCollisionLat(), data.getCollisionLon()), (float) data.getHeading(), 5000); + marker.addDynamicAnchorPosition(new MogoLatLng( + data.getDirection() == 1 ? data.getStopLines().get(1).lat : data.getCollisionLat(), + data.getDirection() == 1 ? data.getStopLines().get(1).lon : data.getCollisionLon()), (float) data.getHeading(), 5000); //移动完成以后,3s后消失 UiThreadHandler.postDelayed(() -> { @@ -98,7 +100,6 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); options.icon3DRes(getModelRes(2)); //TODO -// options.anchorColor("#FF4040"); options.anchorColor("#FB3C3CFF"); //红色#FF3036 蓝色:#256BFF IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options); iMarkerView.setMarker(marker); @@ -107,4 +108,44 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL return marker; } + /** + * 绘制停止线 + * + * @param data + */ + public void renderStopLineData(V2XWarningEntity data) { + MarkerLocation location = new MarkerLocation(); + location.setLat(data.getLat()); + location.setLon(data.getLon()); + + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setMarkerLocation(location); + markerShowEntity.setMarkerType(TYPE_MARKER_CLOUD_WARN_DATA); + + IMogoMarker marker = drawStopLineMarker(markerShowEntity); + + //移动完成以后,3s后消失 + UiThreadHandler.postDelayed(() -> { + marker.remove(); + }, 8000); + + } + + public IMogoMarker drawStopLineMarker(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(getModelRes(1)); //TODO + + options.anchorColor("#FB3C3CFF"); //红色#FF3036 蓝色:#256BFF + IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options); + iMarkerView.setMarker(marker); + marker.setToTop(); + + return marker; + } + + } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/MoGoV2XServicePaths.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/MoGoV2XServicePaths.java index 483ac4e448..04ebf4aa95 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/MoGoV2XServicePaths.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/MoGoV2XServicePaths.java @@ -43,6 +43,13 @@ public class MoGoV2XServicePaths { @Keep public static final String PATH_V2X_PERSON_WARN_POLYLINE_MANAGER = "/v2xPersonWarnPolylineManager/api"; + /** + * V2X 停止线连接线 + */ + @Keep + public static final String PATH_V2X_STOP_POLYLINE_MANAGER = "/v2xStopPolylineManager/api"; + + /** * V2X 云端数据处理 */ 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 2df6f55679..7166bb0fa1 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 @@ -17,6 +17,7 @@ import com.mogo.module.common.drawer.AdasRecognizedResultDrawer; import com.mogo.module.service.MarkerServiceHandler; 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; @@ -114,6 +115,7 @@ public class V2XServiceManager { private static IMoGoV2XStatusManager moGoV2XStatusManager; private static IMoGoWarnPolylineManager moGoWarnPolylineManager; private static IMoGoPersonWarnPolylineManager moGoPersonWarnPolylineManager; + private static IMoGoStopPolylineManager moGoStopPolylineManager; private static IMoGoV2XCloundDataManager moGoV2XCloundDataManager; private V2XServiceManager() { @@ -170,6 +172,7 @@ public class V2XServiceManager { 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); moGoV2XStatusManager = (IMoGoV2XStatusManager) ARouter.getInstance().build(MoGoV2XServicePaths.PATH_V2X_STATUS_MANAGER).navigation(context); } @@ -351,4 +354,11 @@ public class V2XServiceManager { V2XServiceManager.moGoPersonWarnPolylineManager = moGoPersonWarnPolylineManager; } + public static IMoGoStopPolylineManager getMoGoStopPolylineManager() { + return moGoStopPolylineManager; + } + + public static void setMoGoStopPolylineManager(IMoGoStopPolylineManager moGoStopPolylineManager) { + V2XServiceManager.moGoStopPolylineManager = moGoStopPolylineManager; + } } 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 e6a68b6331..f2d9fe9e43 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 @@ -1,6 +1,5 @@ package com.mogo.module.v2x.entity.model; - import com.mogo.map.MogoLatLng; @@ -22,6 +21,8 @@ public class DrawLineInfo { private float width; + private int direction; + public String getType() { return type; } @@ -61,4 +62,12 @@ public class DrawLineInfo { public void setWidth(float width) { this.width = width; } + + public int getDirection() { + return direction; + } + + public void setDirection(int direction) { + this.direction = direction; + } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoStopPolylineManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoStopPolylineManager.java new file mode 100644 index 0000000000..86aa8fb677 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/IMoGoStopPolylineManager.java @@ -0,0 +1,27 @@ +package com.mogo.module.v2x.manager; + +import android.content.Context; + +import com.alibaba.android.arouter.facade.template.IProvider; +import com.mogo.map.overlay.IMogoPolyline; +import com.mogo.module.v2x.entity.model.DrawLineInfo; + +/** + * 绘制可变宽度和渐变的线 + */ +public interface IMoGoStopPolylineManager extends IProvider { + /** + * 绘制连接线,目标车,与当前车辆间连线 + * + * @param context + * @param info + */ + void drawStopPolyline(Context context, DrawLineInfo info); + + /** + * 移除连接线 + */ + void clearLine(); + + IMogoPolyline getMogoStopPolyline(); +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoStopPolylineManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoStopPolylineManager.java new file mode 100644 index 0000000000..1e957b2199 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoStopPolylineManager.java @@ -0,0 +1,79 @@ +package com.mogo.module.v2x.manager.impl; + +import android.content.Context; +import android.util.Log; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.map.overlay.IMogoPolyline; +import com.mogo.map.overlay.MogoPolylineOptions; +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.manager.IMoGoStopPolylineManager; +import com.mogo.module.v2x.manager.IMoGoWarnPolylineManager; + +import java.util.ArrayList; +import java.util.List; + +/** + * 当前车辆与道路事件的连接线 + */ +@Route(path = MoGoV2XServicePaths.PATH_V2X_STOP_POLYLINE_MANAGER) +public class MoGoStopPolylineManager implements IMoGoStopPolylineManager { + private static IMogoPolyline mMogoPolyline; + + + @Override + public void drawStopPolyline(Context context, DrawLineInfo info) { + if (info == null) { + return; + } + + try { + if (mMogoPolyline != null) { + mMogoPolyline.remove(); + } + + // 连接线参数 + MogoPolylineOptions options = new MogoPolylineOptions(); + List colors = new ArrayList<>(); + colors.add(0xFFE32F46); + colors.add(0xFFE32F46); + + Log.d(V2XConst.LOG_NAME_WARN, "MoGoStopPolylineManager roadWidth = " + info.getWidth()); + // 线条粗细,渐变,渐变色值 + // 当前车辆位置 + options.width(info.getWidth() == 0.0 ? 60 : info.getWidth()).useGradient(true).colorValues(colors); + options.add(info.getStartLocation()); + // 目标车辆位置 + options.add(info.getEndLocation()); + + // 绘制线的对象 + mMogoPolyline = V2XServiceManager.getMogoOverlayManager().addPolyline(options); + mMogoPolyline.setTransparency(0.5f); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void clearLine() { + if (mMogoPolyline != null) { + mMogoPolyline.remove(); + mMogoPolyline = null; + } + } + + @Override + public void init(Context context) { + + } + + + @Override + public IMogoPolyline getMogoStopPolyline() { + return mMogoPolyline; + } +} 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 e4722c5036..d3499534cb 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 android.util.Log; import androidx.localbroadcastmanager.content.LocalBroadcastManager; 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; @@ -15,16 +16,21 @@ import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.drawer.V2XWarnDataDrawer; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XWarningEntity; +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.manager.IMoGoV2XCloundDataManager; +import com.mogo.module.v2x.utils.LocationUtils; 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.v2x.V2XServiceManager.getContext; @@ -36,6 +42,8 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog private V2XWarningEntity mCloundWarningInfo; private static String TAG = "MoGoV2XCloundDataManager"; private boolean isSelfLineClear; + private List fillPoints = new ArrayList();//停止线经纬度合集 + @Override public void init(Context context) { @@ -48,39 +56,103 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog Log.d(V2XConst.LOG_NAME_WARN, "analysisV2XCloundDataEvent -----> "); mCloundWarningInfo = cloundWarningInfo; + pointsBetween(); //发送预警提示 - V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>(); - // 控制类型 - v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP); - // 设置数据 - v2xMessageEntity.setContent(cloundWarningInfo); - // 控制展示状态 - v2xMessageEntity.setShowState(true); - - Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2xMessageEntity); - LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent); + MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(cloundWarningInfo.getDirection(), MogoReceiver.ACTION_V2X_FRONT_WARNING); isSelfLineClear = false; - WorkThreadHandler.getInstance().postDelayed(() -> { - //绘制识别物与交汇点连线,并且更新连线数据 - drawOtherObjectLine(cloundWarningInfo); + Log.d(V2XConst.LOG_NAME_WARN, "direction = " + cloundWarningInfo.getDirection()); + if (cloundWarningInfo.getDirection() == 1) { //前方 + //停止线前方画线 + MogoLatLng newLocation = LocationUtils.getNewLocation((MogoLatLng) fillPoints.get(0), 80, cloundWarningInfo.heading); + WorkThreadHandler.getInstance().postDelayed(() -> { + //二轮车和行人的渲染和移动 + V2XWarnDataDrawer.getInstance().renderWarnData(cloundWarningInfo); + //绘制识别物与交汇点连线,并且更新连线数据 + drawStopLine(cloundWarningInfo, newLocation); + //添加停止线marker + handleStopLine(); + }, 0); - //二轮车和行人的渲染和移动 - V2XWarnDataDrawer.getInstance().renderWarnData(cloundWarningInfo); + UiThreadHandler.postDelayed(() -> { + V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoStopPolylineManager().clearLine(); - }, 0); + isSelfLineClear = true; + }, 8000); + + } else { //左侧或者右侧 + WorkThreadHandler.getInstance().postDelayed(() -> { + //绘制识别物与交汇点连线,并且更新连线数据 + drawOtherObjectLine(cloundWarningInfo); + //二轮车和行人的渲染和移动 + V2XWarnDataDrawer.getInstance().renderWarnData(cloundWarningInfo); + }, 0); + + //延迟3秒清理线 + UiThreadHandler.postDelayed(() -> { + V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + + isSelfLineClear = true; + }, 8000); + } - //延迟3秒清理线 - UiThreadHandler.postDelayed(() -> { - V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); - V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); - isSelfLineClear = true; - }, 8000); } + + private void handleStopLine() { + for (int i = 0; i < fillPoints.size(); i++) { + V2XWarningEntity entity = new V2XWarningEntity(); + MogoLatLng latLng = (MogoLatLng) fillPoints.get(i); + entity.setLat(latLng.lat); + entity.setLat(latLng.lon); + entity.setCollisionLat(mCloundWarningInfo.getCollisionLat()); + entity.setCollisionLon(mCloundWarningInfo.getCollisionLon()); + entity.heading = mCloundWarningInfo.heading; + V2XWarnDataDrawer.getInstance().renderStopLineData(entity); + } + } + + /** + * 绘制停止线前方线 TODO 需要实时给行人当前位置 + */ + private void drawStopLine(V2XWarningEntity info, MogoLatLng mogoLatLng) { + IMogoPolyline polyLine = V2XServiceManager.getMoGoStopPolylineManager().getMogoStopPolyline(); + if (info != null) { + if (polyLine != null) { + Log.d(V2XConst.LOG_NAME_WARN, "drawStopLine polyLine != null"); + polyLine.setPoints(Arrays.asList(new MogoLatLng(info.getLat(), info.getLon()), + new MogoLatLng(info.getCollisionLat(), info.getCollisionLon()))); + polyLine.setTransparency(0.5f); + } else { + Log.e(V2XConst.LOG_NAME_WARN, "drawStopLine polyLine == null"); + DrawLineInfo lineInfo = new DrawLineInfo(); + MogoLatLng startLatlng = new MogoLatLng( + ((MogoLatLng) fillPoints.get(0)).lat, + ((MogoLatLng) fillPoints.get(0)).lon); + Log.d(V2XConst.LOG_NAME_WARN, "stop drawStopLine lon =" + startLatlng.lon + "--lat =" + startLatlng.lat); + MogoLatLng endLatlng = new MogoLatLng(mogoLatLng.lat, mogoLatLng.lon); + Log.d(V2XConst.LOG_NAME_WARN, " drawStopLine lon =" + mogoLatLng.lon + "--lat =" + mogoLatLng.lat); + Log.d(V2XConst.LOG_NAME_WARN, " drawStopLine lon =" + endLatlng.lon + "--lat =" + endLatlng.lat); + + lineInfo.setStartLocation(startLatlng); + lineInfo.setEndLocation(endLatlng); + lineInfo.setHeading(info.heading); + Log.d(V2XConst.LOG_NAME_WARN, "drawStopLine width = " + info.getRoadwidth()); + lineInfo.setWidth(info.getRoadwidth()); + V2XServiceManager.getMoGoStopPolylineManager().drawStopPolyline(getContext(), lineInfo); + } + } else { + Log.e(V2XConst.LOG_NAME_WARN, "drawStopLine info == null"); + V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); + } + } + + /** * 绘制行人和二轮车连线,并且更新数据 TODO 需要实时给行人当前位置 */ @@ -100,10 +172,6 @@ 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(info.getLon(), -// info.getLat(), (float) info.heading, true, true); - } Log.d(V2XConst.LOG_NAME_WARN, "drawOtherObjectLine width = " + info.getRoadwidth()); lineInfo.setWidth(info.getRoadwidth()); V2XServiceManager.getMoGoPersonWarnPolylineManager().drawPersonWarnPolyline(getContext(), lineInfo); @@ -132,17 +200,20 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog if (mCloundWarningInfo != null) { if (mogoPolyline != null) { mogoPolyline.setPoints(Arrays.asList(new MogoLatLng(latLng.getLatitude(), latLng.getLongitude()), - new MogoLatLng(mCloundWarningInfo.getCollisionLat(), mCloundWarningInfo.getCollisionLon()))); + new MogoLatLng(mCloundWarningInfo.getDirection() == 1 ? mCloundWarningInfo.getStopLines().get(0).lat : mCloundWarningInfo.getCollisionLat(), + mCloundWarningInfo.getDirection() == 1 ? mCloundWarningInfo.getStopLines().get(0).lon : mCloundWarningInfo.getCollisionLon()))); mogoPolyline.setTransparency(0.5f); } else { Log.e(V2XConst.LOG_NAME_WARN, "onCarLocationChanged2 mogoPolyline == null width = " + mCloundWarningInfo.getRoadwidth()); DrawLineInfo info = new DrawLineInfo(); // 对象 MogoLatLng startLatlng = new MogoLatLng(latLng.getLatitude(), latLng.getLongitude()); - MogoLatLng endLatlng = new MogoLatLng(mCloundWarningInfo.getCollisionLat(), mCloundWarningInfo.getCollisionLon()); + MogoLatLng endLatlng = new MogoLatLng(mCloundWarningInfo.getDirection() == 1 ? mCloundWarningInfo.getStopLines().get(0).lat : mCloundWarningInfo.getCollisionLat(), + mCloundWarningInfo.getDirection() == 1 ? mCloundWarningInfo.getStopLines().get(0).lon : mCloundWarningInfo.getCollisionLon()); info.setHeading(latLng.getBearing()); info.setStartLocation(startLatlng); info.setEndLocation(endLatlng); info.setWidth(mCloundWarningInfo.getRoadwidth()); //TODO 还需要转换比例尺 + info.setDirection(mCloundWarningInfo.getDirection()); V2XServiceManager.getMoGoWarnPolylineManager().drawWarnPolyline(getContext(), info); } } else { @@ -158,4 +229,33 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog } + /** + * 补点后的停止线经纬度合集 + */ + 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 = LocationUtils.getAngle(x.lon, x.lat, y.lon, y.lat); + //根据距离和角度获取下个点的经纬度 + fillPoints.add(x); + for (int i = 1; i < 3; i++) { + MogoLatLng newLocation = LocationUtils.getNewLocation(x, average * i, angle); + fillPoints.add(newLocation); + } + fillPoints.add(y); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + } 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 00af025217..51a9fcb00d 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 @@ -42,8 +42,13 @@ public class MoGoWarnPolylineManager implements IMoGoWarnPolylineManager { MogoPolylineOptions options = new MogoPolylineOptions(); List colors = new ArrayList<>(); - colors.add(0xFFE32F46); - colors.add(0xFFE32F46); + if (info.getDirection() == 1) { + colors.add(0xFF3036FF); + colors.add(0xFF3036FF); + } else { + colors.add(0xFFE32F46); + colors.add(0xFFE32F46); + } Log.d(V2XConst.LOG_NAME_WARN, "MoGoWarnPolylineManager roadWidth = " + info.getWidth()); // 线条粗细,渐变,渐变色值 diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java index 1eaf187abb..4b45679502 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java @@ -114,7 +114,11 @@ public class V2XScenarioManager implements IV2XScenarioManager { case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_LEFT: case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_RIGHT: case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_BOTTOM: - mV2XScenario = new V2XFrontWarningScenario(); + if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { + mV2XScenario = new V2XFrontWarningScenario(); + } else { + mV2XScenario = null; + } break; default: mV2XScenario = null; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java index eed5b0425d..be6b1185a1 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java @@ -53,7 +53,6 @@ public class V2XTestConsoleWindow extends ConstraintLayout { private Button mBtnTriggerRoadEvent; private Button mBtnClearRoadEvent; private Button mBtnTriggerPushEvent; - private Button mBtnTriggerWarningEvent; private Button mBtnTriggerPushLiveCarEvent; private Button mBtnTriggerAnimationEvent; private Button mBtnbtnFrontCarLiveEvent; @@ -117,7 +116,6 @@ public class V2XTestConsoleWindow extends ConstraintLayout { mBtnTriggerOpen = findViewById(R.id.btnTriggerOpen); mBtnClearRoadEvent = findViewById(R.id.btnClearRoadEvent); mBtnTriggerRoadEvent = findViewById(R.id.btnTriggerRoadEvent); - mBtnTriggerWarningEvent = findViewById(R.id.btnTriggerWarningEvent); mBtnTriggerPushEvent = findViewById(R.id.btnTriggerPushEvent); mBtnTriggerPushLiveCarEvent = findViewById(R.id.btnTriggerPushLiveCarEvent); mBtnTriggerAnimationEvent = findViewById(R.id.btnTriggerAnimationEvent); @@ -222,16 +220,6 @@ public class V2XTestConsoleWindow extends ConstraintLayout { }); - //车路云—场景预警-V1.0 碰撞预警 - mBtnTriggerWarningEvent.setOnClickListener(v -> { - V2XMessageEntity v2XMessageEntity = - TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData(); - - Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); - LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent); - }); - mBtnTriggerPushEvent.setOnClickListener(v -> { V2XMessageEntity v2XMessageEntity = TestOnLineCarUtils.getV2XScenarioPushEventData(); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java index 2355cc0096..d8031e5759 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java @@ -42,7 +42,7 @@ import java.util.List; * @description 车路云—场景预警-V1.0 前车/行人/摩托车/盲区碰撞预警 * @since: 2021/3/24 */ -public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopViewStatusListener , IMogoCarLocationChangedListener2 { +public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { private int direction; private V2XWarningEntity mMarkerEntity; @@ -134,14 +134,4 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopV } - @Override - public void onCarLocationChanged2(Location latLng) { - - } - - @Override - public void onCarLocationChanged(MogoLatLng latLng) { - mMarkerEntity.setCarLocation(latLng); - drawPOI(); - } } diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml b/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml index 85c806cb25..7c1583a11d 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml @@ -238,20 +238,6 @@ android:textSize="@dimen/dp_22" android:textStyle="bold" /> -