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 137edcf3ef..9fa7c928fe 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 @@ -86,30 +86,14 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL MarkerShowEntity markerShowEntity = new MarkerShowEntity(); markerShowEntity.setMarkerLocation(location); markerShowEntity.setMarkerType(TYPE_MARKER_CLOUD_WARN_DATA); - - IMogoMarker bottomMarker = drawMarkerWith2Resource(markerShowEntity); - - MogoLatLng mogoLatLng = new MogoLatLng(data.getCollisionLat(), data.getCollisionLon()); - //2D资源图片位置调整 -// MogoLatLng stopLineNew = Trigonometric.getNewLocation(data.getStopLines().get(1), 5, 180); -// MogoLatLng newLocation = Trigonometric.getNewLocation(mogoLatLng, 5, 180); - IMogoMarker marker = drawMarker(markerShowEntity, modeResType(data.getType())); //识别物 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); - //识别物下方的红色圆圈 - bottomMarker.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); -// bottomMarker.addDynamicAnchorPosition(new MogoLatLng( -// data.getDirection() == 1 ? stopLineNew.lat : newLocation.getLat(), -// data.getDirection() == 1 ? stopLineNew.lon : newLocation.getLon()), (float) data.getHeading(), 5000); //移动完成以后,3s后消失 UiThreadHandler.postDelayed(() -> { marker.remove(); - bottomMarker.remove(); }, 8000); } @@ -140,7 +124,7 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL .setGps(false); IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); options.icon3DRes(getModelRes(modeResType)); //TODO - options.anchorColor("#FB3C3CFF"); //红色#FF3036 蓝色:#256BFF + options.anchorColor("#FB3C3CFF"); IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options); iMarkerView.setMarker(marker); marker.setToTop(); diff --git a/modules/mogo-module-common/src/main/res/raw/people.n3d b/modules/mogo-module-common/src/main/res/raw/people.n3d index 1774f3ccd8..9091d5311f 100644 Binary files a/modules/mogo-module-common/src/main/res/raw/people.n3d and b/modules/mogo-module-common/src/main/res/raw/people.n3d differ 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 7166bb0fa1..78ef685e55 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 @@ -1,20 +1,13 @@ package com.mogo.module.v2x; import android.content.Context; -import android.util.Log; - import com.alibaba.android.arouter.launcher.ARouter; -import com.mogo.map.MogoLatLng; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.overlay.IMogoOverlayManager; -import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.search.geo.IMogoGeoSearch; import com.mogo.map.uicontroller.IMogoMapUIController; -import com.mogo.module.common.MogoApisHandler; -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; @@ -23,10 +16,8 @@ import com.mogo.module.v2x.manager.IMoGoV2XMarkerManager; import com.mogo.module.v2x.manager.IMoGoV2XPolylineManager; import com.mogo.module.v2x.manager.IMoGoV2XStatusManager; import com.mogo.module.v2x.manager.IMoGoWarnPolylineManager; -import com.mogo.module.v2x.manager.impl.MoGoV2XCloundDataManager; import com.mogo.module.v2x.network.V2XRefreshModel; import com.mogo.module.v2x.utils.V2XUtils; -import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.adas.IMogoADASController; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java index 584c4e5650..c60b4e390d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java @@ -10,6 +10,7 @@ import com.mogo.module.v2x.listener.V2XMessageListener_401010; import com.mogo.module.v2x.listener.V2XMessageListener_401011; import com.mogo.module.v2x.listener.V2XMessageListener_401012; import com.mogo.module.v2x.listener.V2XMessageListener_402000; +import com.mogo.module.v2x.listener.V2XMessageListener_402001; import com.mogo.utils.logger.Logger; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; @@ -34,7 +35,7 @@ public class V2XSocketManager { private V2XMessageListener_401009 v2XMessageListener_401009; private V2XMessageListener_401010 v2XMessageListener_401010; private V2XMessageListener_402000 mV2XMessageListener_402000; - + private V2XMessageListener_402001 mV2XMessageListener402001; private V2XSocketManager() { } @@ -65,6 +66,7 @@ public class V2XSocketManager { register401007(); register401009(); register401020(); + registerWarningMsg(); // TODO 这里是前瞻需求,量产版本需要注释 register401003(); @@ -72,6 +74,7 @@ public class V2XSocketManager { //register401006(); } + /** * 反注册消息通道,不再进行接受 */ @@ -225,6 +228,7 @@ public class V2XSocketManager { v2XMessageListener_401009 ); } + /** * * 车路云—场景预警-V1.0 * * http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=52829799 @@ -241,6 +245,16 @@ public class V2XSocketManager { ); } + /** + * * 车路云—场景预警-V1.0 + * * http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=52829799 + * * 弱势交通参与者 + */ + public void registerWarningMsg() { + mV2XMessageListener402001 = new V2XMessageListener_402001(); + V2XServiceManager.getMoGoSocketManager().registerOnMessageListener(402001, mV2XMessageListener402001); + } + /** * * 2.0.3 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 65771d6bba..126f448d0a 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 @@ -5,7 +5,7 @@ import android.content.Intent; import android.util.Log; import com.mogo.module.common.entity.V2XWarningEntity; -import com.mogo.module.v2x.listener.V2XWarnMessageListener; +import com.mogo.module.v2x.listener.V2XMessageListener_402001; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.utils.logger.Logger; import com.mogo.utils.network.utils.GsonUtil; @@ -22,7 +22,7 @@ public class V2XWaringManager { private static V2XWaringManager mV2XWaringManager; //TODO 需要修改 - private V2XWarnMessageListener v2XWarnMessageListener; + private V2XMessageListener_402001 mV2XMessageListener402001; private V2XWaringManager() { @@ -83,7 +83,7 @@ public class V2XWaringManager { // 加载数据源 V2XWarningEntity warningEntity = GsonUtil.objectFromJson(baos.toString(), V2XWarningEntity.class); - V2XServiceManager.getMoGoV2XCloundDataManager().analysisV2XCloundDataEvent(warningEntity); +// V2XServiceManager.getMoGoV2XCloundDataManager().analysisV2XCloundDataEvent(warningEntity); } catch (Exception e) { e.printStackTrace(); } @@ -94,10 +94,10 @@ public class V2XWaringManager { */ public void unregisterAdasSocketMessage() { Logger.w(V2XConst.LOG_NAME_WARN, "反注册Socket通道...."); - if (v2XWarnMessageListener != null) { + if (mV2XMessageListener402001 != null) { V2XServiceManager .getMoGoSocketManager() - .unregisterOnMessageListener(401018, v2XWarnMessageListener); + .unregisterOnMessageListener(401018, mV2XMessageListener402001); } } @@ -105,16 +105,16 @@ public class V2XWaringManager { * 道路预警 弱势群体事件,行人 TODO type */ private void registerWarnListener() { - v2XWarnMessageListener = new V2XWarnMessageListener(); + mV2XMessageListener402001 = new V2XMessageListener_402001(); V2XServiceManager .getMoGoSocketManager() .registerOnMessageListener( 401018, - v2XWarnMessageListener); + mV2XMessageListener402001); } - public V2XWarnMessageListener getV2XMessageListener() { - return v2XWarnMessageListener; + public V2XMessageListener_402001 getV2XMessageListener() { + return mV2XMessageListener402001; } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_402001.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_402001.java new file mode 100644 index 0000000000..a98755091f --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XMessageListener_402001.java @@ -0,0 +1,48 @@ +package com.mogo.module.v2x.listener; + +import android.content.Intent; +import android.util.Log; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.mogo.module.common.entity.V2XMessageEntity; +import com.mogo.module.common.entity.V2XWarningEntity; +import com.mogo.module.v2x.V2XConst; +import com.mogo.module.v2x.V2XServiceManager; +import com.mogo.module.v2x.entity.net.V2XOptimalRouteDataRes; +import com.mogo.module.v2x.utils.V2XUtils; +import com.mogo.service.connection.IMogoOnMessageListener; + +/** + * desc: 下发的云端预警数据 + */ +public class V2XMessageListener_402001 implements IMogoOnMessageListener { + + @Override + public Class target() { + return V2XOptimalRouteDataRes.class; + } + + @Override + public void onMsgReceived(V2XOptimalRouteDataRes info) { + Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived ---11---> "); + //Logger.d(MODULE_NAME, "V2XMessageListener_401011==V2X地图气泡数据刷新:\n" + GsonUtil.jsonFromObject(response)); + V2XUtils.runOnBackgroundThread(() -> { + // 解析不同的Marker类型,然后对应的进行绘制 + if (info != null) { + // 解析存储道路事件 liyz + Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived --22--> "); + V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>(); + // 控制类型 + v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW); + // 设置数据 + v2xMessageEntity.setContent(info); + Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); + intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2xMessageEntity); + LocalBroadcastManager.getInstance(V2XUtils.getApp()).sendBroadcast(intent); + } + }); + + } + +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java deleted file mode 100644 index 9c42a2df54..0000000000 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.mogo.module.v2x.listener; - -import android.util.Log; - -import com.mogo.module.common.entity.V2XWarningEntity; -import com.mogo.module.v2x.V2XConst; -import com.mogo.module.v2x.V2XServiceManager; -import com.mogo.module.v2x.utils.V2XUtils; -import com.mogo.service.connection.IMogoOnMessageListener; - -/** - * desc: 下发的云端预警数据 - * - */ -public class V2XWarnMessageListener implements IMogoOnMessageListener { - - @Override - public Class target() { - return V2XWarningEntity.class; - } - - @Override - public void onMsgReceived(V2XWarningEntity info) { - Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived ---11---> "); - //Logger.d(MODULE_NAME, "V2XMessageListener_401011==V2X地图气泡数据刷新:\n" + GsonUtil.jsonFromObject(response)); - V2XUtils.runOnBackgroundThread(() -> { - // 解析不同的Marker类型,然后对应的进行绘制 - if (info != null) { - // 解析存储道路事件 liyz - Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived --22--> "); - V2XServiceManager.getMoGoV2XCloundDataManager().analysisV2XCloundDataEvent(info); - } - }); - - } - -} 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 2d430d7db5..0057de52d9 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 @@ -7,8 +7,6 @@ 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.marker.IMogoMarker; -import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.module.common.MogoApisHandler; @@ -80,7 +78,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog if (mV2XScenario == null) { mV2XScenario = new V2XFrontWarningScenario(); } - mV2XScenario.setWarningEntity(cloundWarningInfo); +// mV2XScenario.setWarningEntity(cloundWarningInfo); mV2XScenario.init(null); //预警蒙层 MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(cloundWarningInfo.getDirection(), MogoReceiver.ACTION_V2X_FRONT_WARNING); 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 93e1410bc8..1ebf7ee558 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,7 @@ 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().handleAdasData(intent); +// V2XWaringManager.getInstance().handleAdasData(intent); } catch (Exception e) { e.printStackTrace(); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/TestPanelBroadcastReceiver.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/TestPanelBroadcastReceiver.java index d273de7c7a..93d9c8cde2 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/TestPanelBroadcastReceiver.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/receiver/TestPanelBroadcastReceiver.java @@ -16,6 +16,7 @@ import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.entity.net.V2XOptimalRouteDataRes; import com.mogo.module.v2x.entity.net.V2XSpecialCarRes; +import com.mogo.module.v2x.scenario.impl.V2XScenarioManager; import com.mogo.module.v2x.scenario.scene.livecar.V2XVoiceCallLiveBiz; import com.mogo.module.v2x.utils.TestOnLineCarUtils; import com.mogo.module.v2x.utils.V2XSQLiteUtils; @@ -76,17 +77,9 @@ public class TestPanelBroadcastReceiver extends BroadcastReceiver { intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); - // 存储本地,出行动态作展示 saveLocalStory(V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING, v2XMessageEntity.getContent().getNoveltyInfo()); - } else if (sceneType == 2) {//车路云—场景预警-V1.0 碰撞预警 - V2XMessageEntity v2XMessageEntity = - TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData(); - - Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); - LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); } else if (sceneType == 3) {//触发H5推送事件 V2XMessageEntity v2XMessageEntity = TestOnLineCarUtils.getV2XScenarioPushEventData(); @@ -141,17 +134,21 @@ public class TestPanelBroadcastReceiver extends BroadcastReceiver { intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); } else if (sceneType == 12) {//车路云场景预警-右侧 - Intent intent = new Intent(V2XConst.BROADCAST_ADAS_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_ADAS_EXTRA_KEY, "right"); + V2XMessageEntity messageEntity = TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData("right"); + Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); + intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, messageEntity); + LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); mContext.sendBroadcast(intent); } else if (sceneType == 13) {//车路云场景预警-左侧 - Intent intent = new Intent(V2XConst.BROADCAST_ADAS_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_ADAS_EXTRA_KEY, "left"); - mContext.sendBroadcast(intent); + V2XMessageEntity messageEntity = TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData("left"); + Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); + intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, messageEntity); + LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); } else if (sceneType == 14) {//行人预警,行人路线预测 车路云预警-前方行人 - Intent intent = new Intent(V2XConst.BROADCAST_ADAS_SCENE_HANDLER_ACTION); - intent.putExtra(V2XConst.BROADCAST_ADAS_EXTRA_KEY, "pedestrians"); - mContext.sendBroadcast(intent); + V2XMessageEntity messageEntity = TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData("pedestrians"); + Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); + intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, messageEntity); + LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); } else if (sceneType == 15) {// 交通状况查询 V2XServiceManager.getIMogoTrafficUploadProvider().verifyCurrentTrafficStatus(); } else if (sceneType == 16) {//触发基于目的地预测的线路推荐 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 5d33724f15..de2c7fc936 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 @@ -110,8 +110,8 @@ 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; } 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 940e4aabf8..03934fbeb9 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 @@ -226,14 +226,14 @@ 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); - }); +// mBtnTriggerWarningEvent.setOnClickListener(v -> { +// V2XMessageEntity v2XMessageEntity = +// TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData("right"); +// +// 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 = 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 b24c8276d9..37762d5ebd 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,41 +42,33 @@ import java.util.List; * @description 车路云—场景预警-V1.0 前车/行人/摩托车/盲区碰撞预警 * @since: 2021/3/24 */ -public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { - private int direction; +public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopViewStatusListener, IMogoCarLocationChangedListener2 { private V2XWarningEntity mMarkerEntity; + static private V2XWarningMarker sV2XWarningMarker = new V2XWarningMarker(); public V2XFrontWarningScenario() { setV2XWindow(new V2XWarningWindow()); -// setV2XMarker(new V2XWarningMarker()); + setV2XMarker(sV2XWarningMarker); } @Override public void init(@Nullable V2XMessageEntity v2XMessageEntity) { try { - if (v2XMessageEntity != null) { + if (v2XMessageEntity.getContent() != null) { + MogoApisHandler.getInstance().getApis().getRegisterCenterApi() + .registerCarLocationChangedListener(TAG, this); if (V2XServiceManager.getMoGoStatusManager().isMainPageOnResume()) { mMarkerEntity = (V2XWarningEntity) v2XMessageEntity.getContent(); - direction = mMarkerEntity.getDirection(); - MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(direction, MogoReceiver.ACTION_V2X_FRONT_WARNING); show(); - drawPOI(); } } else { - direction = mMarkerEntity.getDirection(); - MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(direction, MogoReceiver.ACTION_V2X_FRONT_WARNING); - show(); -// drawPOI(); + } } catch (Exception e) { e.printStackTrace(); } } - public void setWarningEntity(V2XWarningEntity markerEntity) { - mMarkerEntity = markerEntity; - } - @Override public void show() { showWindow(); @@ -85,8 +77,6 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopV @Override public void showWindow() { if (getV2XWindow() != null && mMarkerEntity != null) { - View view = getV2XWindow().getView(); - //Logger.d(MODULE_NAME, "添加window= " + view); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, @@ -95,7 +85,7 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopV .getMogoTopViewManager() .addView(getV2XWindow().getView(), layoutParams, this); getV2XWindow().show(mMarkerEntity); -// getV2XMarker().drawPOI(mMarkerEntity); + getV2XMarker().drawPOI(mMarkerEntity); } } @@ -134,7 +124,7 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopV @Override public void onViewRemoved(View view) { - + Log.d(TAG, "onViewRemoved"); } @Override @@ -147,4 +137,14 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMogoTopV } + @Override + public void onCarLocationChanged2(Location latLng) { + sV2XWarningMarker.onCarLocationChanged2(latLng); + } + + @Override + public void onCarLocationChanged(MogoLatLng latLng) { + + } + } 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 9f3f54f6ce..4cb25d0aa2 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,14 +1,18 @@ package com.mogo.module.v2x.scenario.scene.warning; import android.content.Context; +import android.location.Location; import android.util.Log; import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.map.MogoLatLng; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.navi.IMogoCarLocationChangedListener2; +import com.mogo.map.overlay.IMogoPolyline; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.drawer.MarkerDrawer; +import com.mogo.module.common.drawer.V2XWarnDataDrawer; import com.mogo.module.common.drawer.marker.EmptyMarkerView; import com.mogo.module.common.drawer.marker.IMarkerView; import com.mogo.module.common.drawer.marker.MapMarkerAdapter; @@ -17,10 +21,13 @@ import com.mogo.module.common.entity.MarkerLocation; import com.mogo.module.common.entity.MarkerShowEntity; 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.R; 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.marker.OptimalSpeedMarkerView; import com.mogo.module.v2x.marker.V2XFrontTargetMarkerView; import com.mogo.module.v2x.scenario.view.IV2XMarker; @@ -30,11 +37,15 @@ import com.mogo.utils.ViewUtils; 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.V2XConst.V2X_FRONT_WARNING_MARKER; import static com.mogo.module.v2x.V2XConst.V2X_OPTIMAL_SPEED_MARKER; +import static com.mogo.module.v2x.V2XServiceManager.getContext; /** * @author liujing @@ -43,64 +54,310 @@ import static com.mogo.module.v2x.V2XConst.V2X_OPTIMAL_SPEED_MARKER; */ public class V2XWarningMarker implements IV2XMarker { private static final String TAG = "V2XWarningMarker"; - private V2XWarningEntity mMarkerEntity; - private MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - private Context mContext = V2XServiceManager.getContext(); - private IMogoMarker optimalMarker = null; + private static String WARNING_ARROWS = "WARNING_ARROWS"; + private V2XWarningEntity mCloundWarningInfo; + 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 static long showTime = 4000; + private float bearing; @Override public void drawPOI(Object entity) { try { - mMarkerEntity = (V2XWarningEntity) entity; - MarkerLocation location = new MarkerLocation(); - location.setLat(mMarkerEntity.getLat()); - location.setLon(mMarkerEntity.getLon()); - - markerShowEntity.setMarkerLocation(location); - - MogoMarkerOptions optionsRipple = new MogoMarkerOptions() - .latitude(mMarkerEntity.getLat()) - .longitude(mMarkerEntity.getLon()) - .anchor(0.5f, 0.5f) - .zIndex(MarkerDrawer.MARKER_Z_INDEX_HIGH); - optionsRipple - .icon(ViewUtils.fromView(new EmptyMarkerView(mContext))); - optimalMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_FRONT_WARNING_MARKER, optionsRipple); - optimalMarker.setInfoWindowAdapter(new SimpleWindow3DAdapter(new V2XFrontTargetMarkerView(mContext))); - optimalMarker.showInfoWindow(); - UiThreadHandler.postDelayed(() -> { - optimalMarker.hideInfoWindow(); - }, 8000); + mCloundWarningInfo = (V2XWarningEntity) entity; + drawLineWithEntity(); } catch (Exception e) { - + Log.d(TAG,e.toString()); } } + public void drawLineWithEntity() { + showTime = mCloundWarningInfo.getShowTime(); + pointsBetween(); + bearing = V2XLocationListener.getInstance().getLastCarLocation().getBearing(); + //预警蒙层 + MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(mCloundWarningInfo.getDirection(), MogoReceiver.ACTION_V2X_FRONT_WARNING); + isSelfLineClear = false; + isFirstLocation = false; + V2XServiceManager.getMarkerManager().removeMarkers(WARNING_ARROWS); + if (mCloundWarningInfo.getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP) { //前方 TODO + middleLocationInStopLine = getMiddleLocationInStopLine(); + //如果是正前方类型,红色绘制区域从停止线向前绘制50米 + MogoLatLng warningLocation = Trigonometric.getNewLocation(middleLocationInStopLine, 50, mCloundWarningInfo.getAngle()); + //停止线前方画线 + WorkThreadHandler.getInstance().postDelayed(() -> { + //二轮车和行人的渲染和移动 + V2XServiceManager.getMarkerManager().removeMarkers(TYPE_MARKER_CLOUD_WARN_DATA); + V2XWarnDataDrawer.getInstance().renderWarnData(mCloundWarningInfo); + //绘制识别物与交汇点连线,并且更新连线数据 + drawRedWarningLineFrontOfStopLine(mCloundWarningInfo, middleLocationInStopLine, warningLocation); + //添加停止线marker + handleStopLine(); + //自车画线 + drawSelfCarLine(carLocation.lon, carLocation.lat, bearing); + }, 500); - @Override - public void clearPOI() { - V2XServiceManager.getMarkerManager().removeMarkers(V2X_FRONT_WARNING_MARKER); + UiThreadHandler.postDelayed(() -> { + V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoStopPolylineManager().clearLine(); + isSelfLineClear = true; + }, showTime); + + } else { //左侧或者右侧 + WorkThreadHandler.getInstance().postDelayed(() -> { + //绘制识别物与交汇点连线,并且更新连线数据 + drawOtherObjectLine(mCloundWarningInfo); + //二轮车和行人的渲染和移动 + V2XServiceManager.getMarkerManager().removeMarkers(TYPE_MARKER_CLOUD_WARN_DATA); + V2XWarnDataDrawer.getInstance().renderWarnData(mCloundWarningInfo); + + //车辆静止的时候 + drawSelfCarLine(carLocation.lon, carLocation.lat, bearing); + + }, 500); + + //延迟3秒清理线 + UiThreadHandler.postDelayed(() -> { + V2XServiceManager.getMoGoPersonWarnPolylineManager().clearLine(); + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + isSelfLineClear = true; + }, showTime); + } } - public void clearLine() { - V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + /** + * 场景如:车辆行驶正前方绘制红色区域(停止线继续前行的预警区域) 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(); + } } + /** + * 补点后的停止线经纬度合集 + */ + 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(); + } + } /* - * 2D资源绘制停止线 + * 停止线绘制 + * */ + 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(); + } + } + + private MogoLatLng getMogoLat(MogoLatLng latlng) { + MogoLatLng newLocation = Trigonometric.getNewLocation(latlng, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getAngle()); + return newLocation; + } + + /* + * 自车前方的点,在停止线上--通过自车位置与距离停止线之间的距离计算 + * */ + private MogoLatLng getMiddleLocationInStopLine() { + Log.d(TAG, "计算停止线上的某个点"+String.valueOf(carLocation.lat+","+String.valueOf(carLocation.lon))); + if (carLocation.lat == 0 || carLocation.lon == 0){ + Log.d(TAG, "获取不到车的位置"); + } + MogoLatLng newLocation = Trigonometric.getNewLocation(carLocation, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getAngle()); + return newLocation; + } + + /** + * 自车为起点绘制(根据设计,前方行人/弱势交通参与者预警 getDirection() == ALERT_THE_FRONT_CRASH_WARNING_TOP自车与停止线之间为蓝色预警;其他侧方预警自车与预碰撞点之间显示红色预警) + */ + public 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(); + } + } + } + + /** + * 侧方目标物与预碰撞点连线,并且更新数据 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); + + } + + /* + * 2D资源绘制停止线 暂时不需要 * */ private void drawStopLineWith2Resource() { - MogoLatLng carlo = mMarkerEntity.getCarLocation(); + MogoLatLng carlo = mCloundWarningInfo.getCarLocation(); if (carlo == null) { double lon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(); double lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); carlo = new MogoLatLng(lat, lon); } //自车行驶方向的前方*米的经纬度,该经纬度在停止线上 - MogoLatLng drawStopLineLon = Trigonometric.getNewLocation(carlo, mMarkerEntity.getStopLineDistance(), mMarkerEntity.getAngle()); + MogoLatLng drawStopLineLon = Trigonometric.getNewLocation(carlo, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getAngle()); Log.d(TAG, "2D资源绘" + drawStopLineLon); MogoMarkerOptions optionsRipple = new MogoMarkerOptions() .latitude(drawStopLineLon.getLat()) @@ -117,4 +374,26 @@ public class V2XWarningMarker implements IV2XMarker { stopLine.hideInfoWindow(); }, 8000); } + + public void onCarLocationChanged2(Location latLng) { + carLocation = new MogoLatLng(latLng.getLatitude(), latLng.getLongitude()); + 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()); + } + Log.d(TAG, "车辆行驶轨迹" + String.valueOf(latLng.getLongitude()) + "," + String.valueOf(latLng.getLatitude())); + } + + @Override + public void clearPOI() { + V2XServiceManager.getMarkerManager().removeMarkers(V2X_FRONT_WARNING_MARKER); + } + + public void clearLine() { + V2XServiceManager.getMoGoWarnPolylineManager().clearLine(); + } + } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningWindow.java index d59915b3b0..d43db290f1 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningWindow.java @@ -4,6 +4,7 @@ import android.content.Context; import android.location.Location; import android.os.Handler; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -127,4 +128,5 @@ public class V2XWarningWindow extends V2XBasWindow implements IV2XWindow { .getMogoTopViewManager() .removeView(this); } + } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java index 0bdb711bdc..f4c0dedff9 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java @@ -7,6 +7,7 @@ import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.common.entity.V2XWarningEntity; import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.entity.net.V2XOptimalRouteDataRes; import com.mogo.module.v2x.entity.net.V2XSpecialCarRes; import com.mogo.utils.network.utils.GsonUtil; @@ -158,11 +159,25 @@ public class TestOnLineCarUtils { return null; } - public static V2XMessageEntity getV2XScenarioPushFrontWarningEventData() { + /** + * 测试数据 + */ + public static V2XMessageEntity getV2XScenarioPushFrontWarningEventData(String adasResult) { + try { + int id = R.raw.scenario_warning_event_data_right; + switch (adasResult) { + case "left": + id = R.raw.scenario_warning_event_data_left; + break; + case "pedestrians": + id = R.raw.scenario_warning_event_data_pedestrians; + break; + default: + } InputStream inputStream = V2XUtils.getApp() .getResources() - .openRawResource(R.raw.scenario_warning_event_data_right); + .openRawResource(id); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = -1; byte[] buffer = new byte[1024]; @@ -173,14 +188,10 @@ public class TestOnLineCarUtils { // 加载数据源 V2XWarningEntity warningEntity = GsonUtil.objectFromJson(baos.toString(), V2XWarningEntity.class); - V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>(); - // 控制类型 - v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP); - // 设置数据 - v2xMessageEntity.setContent(warningEntity); - // 控制展示状态 - v2xMessageEntity.setShowState(true); - return v2xMessageEntity; + V2XMessageEntity messageEntity = new V2XMessageEntity(); + messageEntity.setType(warningEntity.getDirection()); + messageEntity.setContent(warningEntity); + return messageEntity; } catch (Exception e) { e.printStackTrace(); }