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 cb6c5decb6..18326771bc 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 @@ -29,7 +29,9 @@ import java.util.List; */ public class V2XWarningMarker implements IV2XMarker { private V2XWarningEntity mMarkerEntity; + private MarkerShowEntity markerShowEntity = new MarkerShowEntity(); private Context mContext = V2XServiceManager.getContext(); + List fillPoints = new ArrayList();//停止线经纬度合集 @Override public void drawPOI(Object entity) { @@ -39,32 +41,43 @@ public class V2XWarningMarker implements IV2XMarker { location.setLat(mMarkerEntity.getLat()); location.setLon(mMarkerEntity.getLon()); - MarkerShowEntity markerShowEntity = new MarkerShowEntity(); markerShowEntity.setMarkerLocation(location); - markerShowEntity.setMarkerType(V2XConst.V2X_FRONT_WARNING_MARKER); - - if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { +// drawLineAndSmooth(); + pointsBetween(); + //绘制停止线 + drawStopLines(fillPoints); + WorkThreadHandler.getInstance().postDelayed(() -> { clearPOI(); - WorkThreadHandler.getInstance().postDelayed(() -> { - IMogoMarker marker = drawMarkerAndReturn(markerShowEntity); - //如果有预警碰撞点,识别物与预警碰撞点之间连线,并执行平移动画 - if (mMarkerEntity.getCollisionLat() > 0 && mMarkerEntity.getCollisionLon() != 0) { - drawLine(); - smooth(marker); - } - }, 0); + }, 6_000); + //绘制安全距离 - } else { - - } } catch (Exception e) { } } + private void drawLineAndSmooth() { + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + clearPOI(); + WorkThreadHandler.getInstance().postDelayed(() -> { + IMogoMarker marker = drawMarkerAndReturn(markerShowEntity); + //如果有预警碰撞点,识别物与预警碰撞点之间连线,并执行平移动画 + if (mMarkerEntity.getCollisionLat() > 0 && mMarkerEntity.getCollisionLon() != 0) { + drawLine(); + smooth(marker); + } + }, 0); + + } else { + + } + } + + //补点后的停止线经纬度合集 public void pointsBetween() { try { + fillPoints.clear(); List stopLines = mMarkerEntity.getStopLines(); if (stopLines.size() > 1) { MogoLatLng x = mMarkerEntity.getStopLines().get(0); @@ -75,11 +88,12 @@ public class V2XWarningMarker implements IV2XMarker { //两点间的角度 double angle = LocationUtils.getAngle(x.lon, x.lat, y.lon, y.lat); //根据距离和角度获取下个点的经纬度 - List replenish = new ArrayList(); + fillPoints.add(x); for (int i = 1; i < 3; i++) { MogoLatLng newLocation = LocationUtils.getNewLocation(x, average * i, angle); - replenish.add(newLocation); + fillPoints.add(newLocation); } + fillPoints.add(y); } } catch (Exception e) { @@ -87,7 +101,29 @@ public class V2XWarningMarker implements IV2XMarker { } - //绘制marker + private void drawStopLines(List points) { + clearPOI(); + for (int i = 0; i < points.size(); i++) { + MogoLatLng latLng = (MogoLatLng) points.get(i); + drawMarkerWithLocation(latLng); + } + } + + private void drawMarkerWithLocation(MogoLatLng latLng) { + MogoMarkerOptions options = new MogoMarkerOptions() + .object(markerShowEntity) + .latitude(latLng.lat) + .longitude(latLng.lon); + IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); + options.icon3DRes(com.mogo.module.service.R.raw.people); + options.anchor(0.5f, 0.5f); + options.anchorColor("#FF4040"); + IMogoMarker marker = V2XServiceManager.getMarkerManager().addMarker(V2XConst.V2X_FRONT_WARNING_MARKER, options); + iMarkerView.setMarker(marker); + marker.setToTop(); + } + + //绘制并返回marker public IMogoMarker drawMarkerAndReturn(MarkerShowEntity markerShowEntity) { MogoMarkerOptions options = new MogoMarkerOptions() .object(markerShowEntity) @@ -96,7 +132,7 @@ public class V2XWarningMarker implements IV2XMarker { 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); + IMogoMarker marker = V2XServiceManager.getMarkerManager().addMarker(V2XConst.V2X_FRONT_WARNING_MARKER, options); iMarkerView.setMarker(marker); marker.setToTop(); return marker; 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 98db0c3e37..85c806cb25 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 @@ -246,7 +246,7 @@ android:layout_marginBottom="@dimen/dp_10" android:background="#FF0606" android:padding="@dimen/dp_10" - android:text="前车碰撞预警" + android:text="前方碰撞预警" android:textColor="#FFFFFF" android:textSize="@dimen/dp_22" app:layout_constraintBottom_toBottomOf="parent" 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 06b468f7d1..ded0e8a92c 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 @@ -2,17 +2,17 @@ "type": 2, "lat": 39.977148, "lon": 116.417478, - "distance": 2.22, + "distance": 2, "collisionLat": 39.977094, "collisionLon": 116.417634, "stopLines":[ { - "lat": 39.977082, - "lon": 116.417553 + "lat": 39.976858, + "lon": 116.417651 }, { - "lat": 39.977078, - "lon": 116.417666 + "lat": 39.976874, + "lon": 116.417757 } ], "from": 1,