From f7523f03676592dbd04c6305ebbf27e97e22bb36 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 7 Dec 2022 09:35:30 +0800 Subject: [PATCH] =?UTF-8?q?[2.13.0]=20=E8=BD=A8=E8=BF=B9=E8=AE=A1=E7=AE=97?= =?UTF-8?q?bug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/BusPassengerModel.java | 15 ++++--- .../utils/CoordinateCalculateRouteUtil.java | 40 +++++++++++++++---- .../passenger/model/TaxiPassengerModel.java | 9 +++-- .../presenter/BaseTaxiPassengerPresenter.java | 1 + 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 761673ec27..1e235f6565 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -94,6 +94,7 @@ public class BusPassengerModel { private int mNextStationIndex = 0;// 要到达站的index private List mTwoStationsRouts = new ArrayList<>(); private int mPreRouteIndex = 0; + private int mWipePreIndex = 0; private static final int MSG_QUERY_BUS_P_STATION = 1001; private final Handler handler = new Handler(new Handler.Callback() { @@ -485,22 +486,24 @@ public class BusPassengerModel { if (isStart){ BusPassengerModelLoopManager.getInstance().startOrStopRouteAndWipe(); }else { + mWipePreIndex = 0; BusPassengerModelLoopManager.getInstance().stopOrStopRouteAndWipe(); } } public void loopRouteAndWipe() { - if (mTwoStationsRouts != null && mTwoStationsRouts.size() > 0 && mLocation != null){ + if (mRoutePoints != null && mRoutePoints.size() > 0 && mLocation != null){ int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew(mPreRouteIndex, - mTwoStationsRouts, - mLocation.getLongitude(), - mLocation.getLatitude()); + .getArrivedPointIndexNew(mWipePreIndex, + mRoutePoints, + mLocation); + + mWipePreIndex = haveArrivedIndex; CallerLogger.INSTANCE.d(M_BUS_P + TAG, "thread = "+ Thread.currentThread().getName()+" haveArrivedIndex== " + haveArrivedIndex); if (mAutopilotPlanningCallback != null){ List routePoints = CoordinateCalculateRouteUtil - .coordinateConverterLocationToLatLng(mContext,mTwoStationsRouts); + .coordinateConverterLocationToLatLng(mContext,mRoutePoints); mAutopilotPlanningCallback.routeResult(routePoints,haveArrivedIndex); } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java index d13f1c932a..b06736dba5 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java @@ -235,17 +235,17 @@ public class CoordinateCalculateRouteUtil { Map> routePonits = new HashMap<>(); List latePoints = new ArrayList<>(); // 剩余轨迹集合 int currentIndex = 0; //记录疑似点 - if (mRoutePoints.size() > preIndex){ + if (mRoutePoints.size() > 0){ //基础点 - MogoLocation baseLatLng = mRoutePoints.get(preIndex); + MogoLocation baseLatLng = mRoutePoints.get(0); float baseDiffDis = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), realLocation.getLatitude() ,baseLatLng.getLongitude(),baseLatLng.getLongitude());// lon,lat, prelon, prelat - for (int i= preIndex; i < mRoutePoints.size(); i++){ + for (int i= 0; i < mRoutePoints.size(); i++){ MogoLocation latLng = mRoutePoints.get(i); //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 - if (latLng.getBearing() == realLocation.getBearing() - latLng.getBearing() || + if (realLocation.getBearing() == realLocation.getBearing() - latLng.getBearing() || Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), realLocation.getLatitude(), @@ -275,6 +275,32 @@ public class CoordinateCalculateRouteUtil { return routePonits; } + public static int getArrivedPointIndexNew(int preIndex, List mRoutePoints, + MogoLocation realLocation) { + int currentIndex = 0; //记录疑似点 //基础点 + MogoLocation baseLatLng = mRoutePoints.get(0); + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude() + , baseLatLng.getLongitude(), baseLatLng.getLongitude());// lon,lat, prelon, prelat + + for (int i = 0; i < mRoutePoints.size(); i++) { + MogoLocation latLng = mRoutePoints.get(i); + if (realLocation.getBearing() == realLocation.getBearing() - latLng.getBearing() || + Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ + float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude(), + latLng.getLongitude(), latLng.getLatitude()); + if (baseDiffDis > diff && i>currentIndex) { +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + } + Logger.d("calculateRouteSumLength", "点:" + currentIndex + "-------是最近的点------ "); + return currentIndex; + } + public static int getArrivedPointIndexNew(int preIndex, List mRoutePoints, double realLon,double realLat) { int currentIndex = preIndex; //记录疑似点 //基础点 @@ -283,10 +309,10 @@ public class CoordinateCalculateRouteUtil { realLat , baseLatLng.getLongitude(), baseLatLng.getLongitude());// lon,lat, prelon, prelat - for (int i = 0; i < mRoutePoints.size(); i++) { + for (int i = preIndex; i < mRoutePoints.size(); i++) { MogoLocation latLng = mRoutePoints.get(i); - //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 -// if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90) { +// if (realLocation.getBearing() == realLocation.getBearing() - latLng.getBearing() || +// Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ float diff = CoordinateUtils.calculateLineDistance(realLon, realLat, latLng.getLongitude(), latLng.getLatitude()); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index 3deddb2caf..862d204150 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -121,6 +121,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback private int delayTime = 2; private double mLongitude, mLatitude; + private MogoLocation mLocation = null; private List mLocationsModels = new ArrayList<>(); @@ -460,6 +461,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } mLongitude = location.getLongitude(); mLatitude = location.getLatitude(); + + mLocation = location; // CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"mLongitude = "+mLongitude+", mLatitude = "+mLatitude); for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ callback.onCarLocationChanged(location); @@ -613,17 +616,17 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback if (isStart){ TaxiPassengerModelLoopManager.getInstance().startRouteAndWipe(); }else { + mPreRouteIndex = 0; TaxiPassengerModelLoopManager.getInstance().stopRouteAndWipe(); } } public void loopRouteAndWipe() { - if (mLocationsModels != null && mLocationsModels.size() > 0){ + if (mLocationsModels != null && mLocationsModels.size() > 0 && mLocation != null){ int haveArrivedIndex = CoordinateCalculateRouteUtil .getArrivedPointIndexNew(mPreRouteIndex, mLocationsModels, - mLongitude, - mLatitude); + mLocation); mPreRouteIndex = haveArrivedIndex; if (mAutopilotPlanningCallback != null){ List latLngsModels = CoordinateCalculateRouteUtil diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index 5478bbbe1a..8876dbf5fe 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -215,6 +215,7 @@ public class BaseTaxiPassengerPresenter extends Presenter { mView.showOrHideServingOrderFragment(false,true);