From c4cd4a3f8f2dc69181ddf8d6bfcebf8eda560925 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Thu, 28 Jul 2022 21:33:42 +0800 Subject: [PATCH] =?UTF-8?q?[290=20bus]=201=E3=80=81=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E5=A2=9E=E5=8A=A0=E5=88=B0=E7=AB=99=E5=9B=B4=E6=A0=8F?= =?UTF-8?q?=202=E3=80=81=E6=BB=91=E5=8A=A8=E5=87=BA=E5=8F=91=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bus/bean/BusStationBean.java | 10 ++++ .../com/mogo/och/bus/constant/BusConst.kt | 3 ++ .../com/mogo/och/bus/model/BusOrderModel.java | 50 +++++++++++++++++++ .../com/mogo/och/bus/view/SlidePanelView.java | 8 ++- .../src/main/res/layout/bus_base_fragment.xml | 2 +- 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java index 4e8b00eb18..ce62d497e5 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java @@ -28,6 +28,8 @@ public class BusStationBean { private double lon; //高精坐标 private double lat; //高精坐标 private int businessType; //站点类型,9:taxi,10:bus + private double gcjLon; //高德 + private double gcjLat; //高德 private int status; private int siteId; private int seq; @@ -35,6 +37,14 @@ public class BusStationBean { private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 private boolean leaving; + public double getGcjLon() { + return gcjLon; + } + + public double getGcjLat() { + return gcjLat; + } + public void setName(String name) { this.name = name; } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt index 6bd9e3ba8a..bd1c823a13 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -72,5 +72,8 @@ class BusConst { const val TYPE_MARKER_BUS_ORDER = "TYPE_MARKER_BUS_ORDER" const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L + + //围栏到站 暂定10米 + const val ARRIVE_AT_END_STATION_DISTANCE = 10 } } \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index e1b8f695b2..541dcaf7e4 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -17,6 +17,7 @@ import androidx.annotation.NonNull; import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; +import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; @@ -25,8 +26,10 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; @@ -111,6 +114,8 @@ public class BusOrderModel { private boolean hadQueryLeaveAwayPassager = false; + private volatile boolean isArrivedStation = false; + private final Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { @@ -376,9 +381,42 @@ public class BusOrderModel { if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(location); } + + //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 + if (isGoingToNextStation && !isArrivedStation){ + judgeStartStation(location); + } } }; + //根据围栏判断,是否到达起点 + private void judgeStartStation(Location location) { + + if (backgroundCurrentStationIndex -1 < 0 || backgroundCurrentStationIndex > stationList.size()-1){ + return; + } + BusStationBean upcomingStation = stationList.get( backgroundCurrentStationIndex); + + double startLon = upcomingStation.getGcjLon(); + double startLat = upcomingStation.getGcjLat(); + double distance = CoordinateUtils.calculateLineDistance( + startLon, startLat, + location.getLongitude(), location.getLatitude() ); + + Logger.i(TAG, "judgeStartStation() distance = " + distance); + + if ( distance > BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { + distance = CoordinateUtils.calculateLineDistance(startLon, startLat, + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon(), + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat()); + } + + if ( distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { + onArriveAt(null); //无自动驾驶到站信息传null + return; + } + } + /** * 查询小巴路线 */ @@ -443,6 +481,7 @@ public class BusOrderModel { if ( o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty() ) { return; } + isArrivedStation = false; if (!isOneWayOver){ CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); //需要更改当前站和下一站的状态 然后渲染 @@ -499,6 +538,9 @@ public class BusOrderModel { * @param isRestart */ private void startAutopilot(boolean isRestart) { + + isArrivedStation = false; + BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex + 1); @@ -542,6 +584,10 @@ public class BusOrderModel { * 到站后重置站点状态 */ private void arriveSiteStation(boolean isRestart) { + if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { //到站短时间内调用多次 + CallerLogger.INSTANCE.e( M_BUS + TAG, "数组越界" ); + return; + } int arrivedStationIndex = 0; if (!isRestart){ arrivedStationIndex = backgroundCurrentStationIndex + 1; @@ -890,6 +936,10 @@ public class BusOrderModel { CallerLogger.INSTANCE.e( M_BUS + TAG, "到站异常,取消后续操作结束" ); return; } + + if (isArrivedStation) return; + isArrivedStation = true; + if (FunctionBuildConfig.isDemoMode && backgroundCurrentStationIndex <= stationList.size() - 1) {//到达一站结束美化 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; CallerAutoPilotManager.INSTANCE.setDemoMode(false); diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index 53d27b181b..1433e8e88e 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -112,6 +112,7 @@ public class SlidePanelView extends View { } private void init() { + bgRectF = new RectF(0, 0, 0, 0); bgPaint.setColor(Color.parseColor("#CC0F1325")); bgPaint.setStyle(Paint.Style.FILL); @@ -160,7 +161,12 @@ public class SlidePanelView extends View { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); - bgRectF = new RectF(0, 0, w, h); + if (bgRectF != null){ + bgRectF.left = 0; + bgRectF.top = 0; + bgRectF.right = w; + bgRectF.bottom = h; + } if (matrixAnim != null) { matrixAnim.cancel(); diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml index bf9ffe495e..4bd073fff0 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml @@ -169,7 +169,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/module_mogo_och_margin_bottom" - android:visibility="gone" + android:visibility="invisible" app:BLOCK_START_X="@dimen/module_mogo_och_slide_panel_block_start_x" app:BLOCK_START_Y="@dimen/module_mogo_och_slide_panel_block_start_y" app:NORMAL_TEXT_MARGIN_LEFT="@dimen/module_mogo_och_slide_panel_normal_text_margin_left"