diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java index 3f1cb1bac3..c2c8fb1d6a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java @@ -11,6 +11,6 @@ import mogo.telematics.pad.MessagePad; * @date: 2021/11/1 */ public interface IOCHTaxiPassengerAutopilotPlanningCallback { - void routeResult(List models); + void setLineMarker(List models); void routeResultByServer(List models); } \ No newline at end of file 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 83f21b9e67..07f7366656 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 @@ -16,6 +16,7 @@ import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.api.v2x.LimitingVelocityListener; @@ -56,6 +57,7 @@ import com.mogo.service.statusmanager.StatusDescriptor; import org.jetbrains.annotations.NotNull; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -103,6 +105,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback private double mLongitude, mLatitude; + private List mLocationsModels = new ArrayList<>(); + private TaxiPassengerModel() { } @@ -571,12 +575,54 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { if (null != routeList && routeList.getWayPointsList().size() > 0){ calculateRouteLineSum(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routeList.getWayPointsList())); - updateRouteResult(routeList.getWayPointsList()); + setRouteLineMarker(routeList.getWayPointsList()); + startToRouteAndWipe(routeList.getWayPointsList()); } } }; + public void startToRouteAndWipe(List models) { + List latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjListCommon(mContext,models); + mLocationsModels.clear(); + mLocationsModels.addAll(latLngModels); + startOrStopRouteAndWipe(true); + } + + /** + * 实时轨迹擦除 + * @param isStart + */ + public void startOrStopRouteAndWipe(boolean isStart){ + if (isStart){ + TaxiPassengerModelLoopManager.getInstance().startOrStopRouteAndWipe(); + }else { + TaxiPassengerModelLoopManager.getInstance().stopOrStopRouteAndWipe(); + } + } + + public void loopRouteAndWipe() { + if (mLocationsModels != null && mLocationsModels.size() > 0){ + List lastPoints = CoordinateCalculateRouteUtil + .getRemainPointListByCompare(mLocationsModels,mLongitude,mLatitude); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routeResultByServer(lastPoints); + } + } + } + + /** + * 设置小地图路径的起终点marker + */ + public void setRouteLineMarker(List models){ + List latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjListCommon(mContext,models); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.setLineMarker(latLngModels); + } + } + /** * 限速监听 */ @@ -590,11 +636,6 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } }; - public void updateRouteResult(List models){ - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResult(models); - } - } /** * 导航订单起点到终点 获得剩余时间,里程,预计到达时间 */ @@ -647,7 +688,12 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback if (data != null && data.data != null && data.data != null && data.data.size() > 0){ if (mAutopilotPlanningCallback != null){ calculateRouteLineSum(data.data); - mAutopilotPlanningCallback.routeResultByServer(data.data); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.setLineMarker(data.data); + } + mLocationsModels.clear(); + mLocationsModels.addAll(data.data); + startOrStopRouteAndWipe(true); } }else { queryOrderRouteList(); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java index eacf0496b3..18225c7cea 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java @@ -31,6 +31,28 @@ public class TaxiPassengerModelLoopManager { private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 private Disposable mQueryOrderRemainingDisposable; //心跳轮询 + private Disposable mRouteWipeDisposable; //心跳轮询 + + public void startOrStopRouteAndWipe() { + if (mRouteWipeDisposable != null && !mRouteWipeDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startOrStopRouteWipe()"); + mRouteWipeDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, + TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> TaxiPassengerModel.getInstance().loopRouteAndWipe()); + } + + public void stopOrStopRouteAndWipe() { + if (mRouteWipeDisposable != null) { + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopOrStopRouteWipe()"); + mRouteWipeDisposable.dispose(); + mRouteWipeDisposable = null; + } + } public void startInAndWaitOrdersLoop() { if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java index 75a3457e21..15b2472c79 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java @@ -69,15 +69,12 @@ public class TaxiPassengerServingOrderPresenter extends Presenter models) { + public void setLineMarker(List models) { if (models == null) return; - List latLngList = new ArrayList<>(); - for (MessagePad.Location routeModel : models) { - latLngList.add(new MogoLatLng(routeModel.getLatitude(), routeModel.getLongitude())); - } - runOnUIThread(() -> mView.routeResult(latLngList)); + runOnUIThread(() -> mView.setLineMarker(models)); } + @Override public void routeResultByServer(List models) { if (models == null) return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java index 533c98f4ed..831abdbe23 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java @@ -15,4 +15,9 @@ public interface ITaxiPassengerMapDirectionView { * 清除路径线 */ void clearPolyline(); + + /** + * 设置路径中起终点marker + */ + void setLineMarker(); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index 4d8e006026..08214a7499 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -229,6 +229,14 @@ public class TaxiPassengerBaseFragment extends MvpFragment 2) { + // 设置开始结束Marker位置 + LatLng startLatLng = mCoordinatesLatLng.get(0); + LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); + + mStartMarker.setPosition(startLatLng); + mEndMarker.setPosition(endLatLng); + mStartMarker.setVisible(true); + mEndMarker.setVisible(true); + } + } + @Override public void drawablePolyline() { - clearPolyline(); + if (mPolyline != null) { + mPolyline.remove(); + } if (mAMap != null) { addRouteColorList(); if (mCoordinatesLatLng.size() > 2) { - // 设置开始结束Marker位置 - - LatLng startLatLng = mCoordinatesLatLng.get(0); - LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); - - mStartMarker.setPosition(startLatLng); - mEndMarker.setPosition(endLatLng); - mStartMarker.setVisible(true); - mEndMarker.setVisible(true); - //设置线段纹理 PolylineOptions polylineOptions = new PolylineOptions(); polylineOptions.addAll(mCoordinatesLatLng); @@ -273,7 +285,6 @@ public class TaxiPassengerMapDirectionView @Override public void clearPolyline() { -// mCoordinatesLatLng.clear(); if (mPolyline != null) { mPolyline.remove(); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java index 29662add0f..bb03a1055a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java @@ -208,10 +208,17 @@ public class TaxiPassengerServingOrderFragment extends TaxiPassengerModel.getInstance().destoryGeocodeSearch(); } - public void routeResult(List latLngList) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResult:" + latLngList.size()); + public void setLineMarker(List latLngList){ if (latLngList.size() > 0) { - drawablePolyline(latLngList); + if (mMapDirectionView != null) { + mMapDirectionView.setCoordinatesLatLng(latLngList); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.setLineMarker(); + } + }); + } } else { clearPolyline(); } @@ -226,23 +233,6 @@ public class TaxiPassengerServingOrderFragment extends } } - /** - * 绘制 - * - * @param coordinates - */ - private void drawablePolyline(List coordinates) { - if (mMapDirectionView != null) { - mMapDirectionView.convert(coordinates); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mMapDirectionView.drawablePolyline(); - } - }); - } - } - public void drawablePolylineByServerRoute(List mCoordinatesLatLng){ if (mMapDirectionView != null){ mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java index b076c189b6..7bd9a381ea 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java @@ -37,7 +37,8 @@ public class TPRouteDataTestUtils { builder.setLongitude(s.getDouble("lon")); list.add(builder.build()); } - TaxiPassengerModel.getInstance().updateRouteResult(list); + TaxiPassengerModel.getInstance().setRouteLineMarker(list); + TaxiPassengerModel.getInstance().startToRouteAndWipe(list); } catch (JSONException e) { e.printStackTrace(); }