From d6086f1996af6472fa36781578f9423754e097c3 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 3 Aug 2022 16:35:50 +0800 Subject: [PATCH] =?UTF-8?q?[290=20bus/taxi]=201=E3=80=81=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E9=97=AE=E9=A2=98=202=E3=80=81bus=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=85=A8=E5=B1=80=E8=BD=A8=E8=BF=B9=E5=92=8C=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E5=9D=90=E6=A0=87=E8=AE=A1=E7=AE=97=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E7=AB=99=E7=82=B9=E8=BD=A8=E8=BF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/bean/BusPassengerStation.java | 9 ++++ .../passenger/model/BusPassengerModel.java | 50 ++++++++++++++++--- .../presenter/BaseBusPassengerPresenter.java | 2 +- .../ui/BusPassengerBaseFragment.java | 1 - .../ui/BusPassengerMapDirectionView.java | 2 + .../ui/BusPassengerRouteFragment.java | 2 +- .../main/res/layout/bus_p_route_fragment.xml | 2 +- .../TaxiPassengerServingOrderPresenter.java | 6 +-- 8 files changed, 59 insertions(+), 15 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java index fa0aa2051c..5e1b8a74de 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java @@ -12,6 +12,8 @@ public class BusPassengerStation { private String cityCode; private double lon; //高精坐标 private double lat; //高精坐标 + private double gcjLon; //高德坐标 + private double gcjLat; //高德坐标 private int businessType; //站点类型,9:taxi,10:bus private int status; private int siteId; @@ -72,6 +74,13 @@ public class BusPassengerStation { return cityCode; } + public double getGcjLon() { + return gcjLon; + } + + public double getGcjLat() { + return gcjLat; + } public int getBusinessType() { return businessType; 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 7d06ba2d26..6322d5dd04 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 @@ -84,6 +84,10 @@ public class BusPassengerModel { private double mLongitude, mLatitude; + List mStations = new ArrayList<>(); + private int mNextStationIndex = 0;// 要到达站的index + private List mTwoStationsRouts = new ArrayList<>(); + private BusPassengerModel() { } @@ -147,12 +151,21 @@ public class BusPassengerModel { mRouteLineInfoCallback.updateLineInfo(result.getName(),result.getRunningDur()); if (result.getSites() != null){ List stations = result.getSites(); + mStations.clear(); + mStations.addAll(stations); for (int i = 0; i< stations.size(); i++){ BusPassengerStation station = stations.get(i); if (station.getDrivingStatus() == STATION_STATUS_STOPPED && station.isLeaving() && i+1 < stations.size()){ mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false); + if(mNextStationIndex != i+1){ + startRemainRouteInfo(); + } + mNextStationIndex = i+1; return; }else if (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()){ + if (i == 0){ + startOrStopRouteAndWipe(false); + } startOrStopCalculateRouteInfo(false); mRouteLineInfoCallback.updateStationsInfo(stations,i,true); return; @@ -354,7 +367,6 @@ public class BusPassengerModel { List routePoints = routeList.getWayPointsList(); if (null != routePoints && routePoints.size() > 0){ updateRoutePoints(routePoints); - startRemainRouteInfo(); setRouteLineMarker(); startToRouteAndWipe(); } @@ -366,18 +378,40 @@ public class BusPassengerModel { List latLngModels = CoordinateCalculateRouteUtil .coordinateConverterWgsToGcjListCommon(mContext,routePoints); mRoutePoints.addAll(latLngModels); + calculateTwoStationsRoute(); + } - float sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mRoutePoints); - SharedPrefsMgr.getInstance(mContext).putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS,(int) sumLength); + private void calculateTwoStationsRoute(){ + //找出前往站对应的轨迹点,拿出两站点的集合 + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size()); + if (mRoutePoints.size() > 0) { + if (mNextStationIndex <= mStations.size()-1 && mNextStationIndex - 1 >=0){ + mTwoStationsRouts.clear(); + BusPassengerStation stationNext = mStations.get(mNextStationIndex); + BusPassengerStation stationCur = mStations.get(mNextStationIndex - 1); + //当前站在轨迹中对应的点 + int currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + ,stationCur.getGcjLon(),stationCur.getGcjLat()); + //要前往的站在轨迹中对应的点 + int nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + ,stationNext.getGcjLon(),stationNext.getGcjLat()); + mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex,nextRouteIndex)); + float sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mTwoStationsRouts); + SharedPrefsMgr.getInstance(mContext).putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS,(int) sumLength); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.updateTotalDistance(); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.updateTotalDistance(); + } + } } } public void dynamicCalculateRouteInfo() { + //计算当前位置和下一站的剩余点集合 + //计算剩余点总里程和时间 + calculateTwoStationsRoute(); List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude); + .getRemainPointListByCompare(mTwoStationsRouts,mLongitude,mLatitude); float lastSumLength = 0; if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 @@ -388,7 +422,7 @@ public class BusPassengerModel { lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); } double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 - + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "lastSumLength = " + lastSumLength); if (mAutopilotPlanningCallback != null){ mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); } @@ -441,7 +475,7 @@ public class BusPassengerModel { * @param isStart */ public void startOrStopCalculateRouteInfo(boolean isStart) { - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopOrderLoop() " + isStart); + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopCalculateRouteInfo() " + isStart); if (isStart) { BusPassengerModelLoopManager.getInstance().startCalculateRouteInfoLoop(); } else { diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java index e3b32a6960..e139ae3dff 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java @@ -139,7 +139,7 @@ public class BaseBusPassengerPresenter extends Presenter models, int haveArrivedIndex) { CallerLogger.INSTANCE.d(M_BUS_P + TAG, "routeResult:" + models.size() + " haveArrivedIndex = "+haveArrivedIndex); - mView.routeResult(models,haveArrivedIndex); + runOnUIThread(() ->mView.routeResult(models,haveArrivedIndex)); } @Override diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java index b509bc789d..6e69bcc01e 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java @@ -125,7 +125,6 @@ public abstract class BusPassengerBaseFragment 0){ diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java index 825d6a646c..a663e20563 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java @@ -298,6 +298,8 @@ public class BusPassengerMapDirectionView } public void clearCoordinatesLatLng(){ + textureList.clear(); + texIndexList.clear(); mCoordinatesLatLng.clear(); mLinePointsLatLng.clear(); } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index a3ea8e9ebe..29ccf56f35 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -248,8 +248,8 @@ public class BusPassengerRouteFragment extends if (currentStationIndex == 0 && isArrived){ //到达始发站且并未出发, 恢复站点marker 清楚路径 清空路径点 SharedPrefsMgr.getInstance(getContext()) .remove(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS); - clearPolyline(); if (mMapDirectionView != null) mMapDirectionView.clearCoordinatesLatLng(); + clearPolyline(); } if (stations.size() > 0){ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml index 61e9d4acf9..58ae13004c 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml @@ -7,7 +7,7 @@