diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java index 786264650f..8d8c4b0453 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java @@ -10,7 +10,6 @@ import mogo.telematics.pad.MessagePad; * Created on 2022/3/31 */ public interface IBusPassengerAutopilotPlanningCallback { - void routeResult(List models,int haveArrivedIndex); void routePlanningToNextStationChanged(long meters, long timeInSecond); void updateTotalDistance(); } diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index b2d50d89bf..52838d931b 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -34,10 +34,11 @@ import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse; import com.mogo.och.common.module.bean.dpmsg.AppConnectMsg; import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg; import com.mogo.och.common.module.bean.dpmsg.DPMsgType; -import com.mogo.och.common.module.bean.dpmsg.LoginCacheStatus; import com.mogo.och.common.module.bean.dpmsg.TaskDetailsMsg; import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager; import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener; +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.commons.module.status.StatusDescriptor; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; @@ -49,11 +50,9 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager; -import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.CoordinateUtils; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback; import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback; @@ -151,14 +150,6 @@ public class BusPassengerModel { sendMsgToServer(GsonUtils.toJson(msg)); } - private void queryLoginStatusByLocal() { - //本地去请求司机端 - LoginCacheStatus msg = new LoginCacheStatus(0, - DPMsgType.TYPE_LOGIN_STATUS.getType()); - - sendMsgToServer(GsonUtils.toJson(msg)); - } - public void setDriverStatusCallback(IBusPassegerDriverStatusCallback callback){ this.mDriverStatusCallback = callback; } @@ -255,7 +246,7 @@ public class BusPassengerModel { } if (code == 1003){ routesResult = null; - startOrStopCalculateRouteInfo(false); + cleanStation("queryDriverSiteByCoordinate 1003"); return; } queryDriverByLocalDriver(); @@ -268,7 +259,7 @@ public class BusPassengerModel { routesResult = null; } mNextStationIndex = 0; - startOrStopCalculateRouteInfo(false); + cleanStation("queryDriverSiteByCoordinate"); mRoutePoints.clear(); if (mRouteLineInfoCallback != null){ mRouteLineInfoCallback.showNoTaskView(); @@ -298,19 +289,20 @@ public class BusPassengerModel { mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false); if(mNextStationIndex != i+1){ mTwoStationsRouts.clear(); - startRemainRouteInfo(); } mNextStationIndex = i+1; + BusStationBean startStation = mStations.get(i); + BusStationBean endStation = mStations.get(i+1); + setTrajectoryStation(startStation, endStation, result.getLineId()); return; }else if (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()){ - if (i == 0){ - startOrStopRouteAndWipe(false); + if (i == stations.size() - 1) { + cleanStation("updatePassengerRouteInfo最后一个站点"); } isGoingToNextStation = false; Logger.d(M_BUS_P + TAG, "order = station= arrive"); mPreRouteIndex = 0; - startOrStopCalculateRouteInfo(false); mRouteLineInfoCallback.updateStationsInfo(stations,i,true); return; } @@ -322,7 +314,7 @@ public class BusPassengerModel { public void release() { releaseListeners(); - startOrStopCalculateRouteInfo(false); + cleanStation("release"); startOrStopOrderLoop(false); } @@ -363,6 +355,7 @@ public class BusPassengerModel { CallerTelematicListenerManager.INSTANCE.addListener(TAG,mReceivedMsgListener); AbnormalFactorsLoopManager.INSTANCE.startLoopAbnormalFactors(mContext); + TrajectoryAndDistanceManager.INSTANCE.addDistanceListener(TAG, trajectoryListener); } private void releaseListeners() { @@ -383,6 +376,28 @@ public class BusPassengerModel { CallerTelematicListenerManager.INSTANCE.removeListener(TAG); } + private final IDistanceListener trajectoryListener = new IDistanceListener() { + @Override + public void stationDistanceCallback(float distance) { + + } + @Override + public void distanceCallback(float distance) { + double lastTime = distance / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6; //秒 + CallerLogger.d(M_BUS_P + TAG, "轨迹排查==lastSumLength = "+distance); + if(routesResult!=null){ + for (BusStationBean site : routesResult.getSites()) { + if (site.getDrivingStatus() == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving()) { + return; + } + } + } + mAutopilotPlanningCallback.routePlanningToNextStationChanged( + (long)distance, (long)lastTime + ); + } + }; + private final IReceivedMsgListener mReceivedMsgListener = new IReceivedMsgListener() { @Override public void onReceivedServerSn(@Nullable String sn) { @@ -552,8 +567,8 @@ public class BusPassengerModel { @Override public synchronized void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { - CallerLogger.d(M_BUS_P + TAG, "onAutopilotRotting = " - + GsonUtil.jsonFromObject(routeList)); +// CallerLogger.d(M_BUS_P + TAG, "onAutopilotRotting = " +// + GsonUtil.jsonFromObject(routeList)); List routePoints = routeList.getWayPointsList(); if(globalPathTruncation!=null&&!globalPathTruncation.isDisposed()){ @@ -568,7 +583,6 @@ public class BusPassengerModel { CallerLogger.d(M_BUS_P + TAG, "接受轨迹中"); if (null != routePoints && routePoints.size() > 0){ updateRoutePoints(routePoints); - startToRouteAndWipe(); } } }; @@ -619,108 +633,12 @@ public class BusPassengerModel { } } - public void dynamicCalculateRouteInfo() { - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - CallerLogger.d(M_BUS_P + TAG, "轨迹排查==mTwoStationsRouts.size() = " + mTwoStationsRouts.size()); - if (mTwoStationsRouts.size() == 0){ - calculateTwoStationsRoute(); - } - if (mTwoStationsRouts.size() > 0 && mLocation != null){ - Map> lastPointsMap = CoordinateCalculateRouteUtil - .getRemainPointListByCompareNew(mPreRouteIndex,mTwoStationsRouts,mLocation); - if(lastPointsMap==null){ - return; - } - for (int index: lastPointsMap.keySet()) { - mPreRouteIndex = index; - break; - } - - for (List lastPoints: lastPointsMap.values()){ - CallerLogger.d(M_BUS_P + TAG, "轨迹排查==lastPoints.size() = " + lastPoints.size()); - float lastSumLength = 0; - if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 - if (mNextStationIndex <= mStations.size()-1 && mNextStationIndex >= 0){ - BusStationBean stationNext = mStations.get(mNextStationIndex); - lastSumLength = CoordinateUtils.calculateLineDistance( - stationNext.getGcjLon(), stationNext.getGcjLat(), - mLocation.getLongitude(), mLocation.getLatitude()); - }else { - lastSumLength = CoordinateUtils.calculateLineDistance( - lastPoints.get(0).getLongitude(), lastPoints.get(0).getLatitude(), - mLocation.getLongitude(), mLocation.getLatitude()); - } - - }else { - lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); - } - - double lastTime = lastSumLength / getAverageSpeed() * 3.6 ; //秒 - CallerLogger.d(M_BUS_P + TAG, "轨迹排查==lastSumLength = " + lastSumLength); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); - } - } - } - } - public int getAverageSpeed(){ return BusPassengerConst.SHUTTLE_AVERAGE_SPEED; } - public void startRemainRouteInfo() { - //开启实时计算剩余距离,剩余时间,预计时间 - startOrStopCalculateRouteInfo(true); - } - - public void startToRouteAndWipe() { - startOrStopRouteAndWipe(true); - } - - /** - * 实时轨迹擦除 - * @param isStart - */ - public void startOrStopRouteAndWipe(boolean isStart){ - if (isStart){ - BusPassengerModelLoopManager.getInstance().startOrStopRouteAndWipe(); - }else { - mWipePreIndex = 0; - BusPassengerModelLoopManager.getInstance().stopOrStopRouteAndWipe(); - } - } - public void loopRouteAndWipe() { - if (mRoutePoints != null && mRoutePoints.size() > 0 && mLocation != null){ - int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew(mWipePreIndex, - mRoutePoints, - mLocation); - mWipePreIndex = haveArrivedIndex; - - CallerLogger.d(M_BUS_P + TAG, "thread = "+ Thread.currentThread().getName()+" haveArrivedIndex== " + haveArrivedIndex); - if (mAutopilotPlanningCallback != null){ - List routePoints = CoordinateCalculateRouteUtil - .coordinateConverterLocationToLatLng(mContext,mRoutePoints); - mAutopilotPlanningCallback.routeResult(routePoints,haveArrivedIndex); - } - } - } - - /** - * 开始轮询计算剩余里程和时间 - * @param isStart - */ - public void startOrStopCalculateRouteInfo(boolean isStart) { - CallerLogger.d(M_BUS_P + TAG, "startOrStopCalculateRouteInfo() " + isStart); - if (isStart) { - BusPassengerModelLoopManager.getInstance().startCalculateRouteInfoLoop(); - } else { - mTwoStationsRouts.clear(); - BusPassengerModelLoopManager.getInstance().stopCalculateRouteInfLoop(); - } } private void startOrStopOrderLoop(boolean start) { @@ -732,4 +650,23 @@ public class BusPassengerModel { } } + private void setTrajectoryStation( + BusStationBean startStationInfo , + BusStationBean endStationInfo, + int lineId + ) { + MogoLocation startStation = new MogoLocation(); + startStation.setLongitude(startStationInfo.getGcjLon()); + startStation.setLatitude(startStationInfo.getGcjLat()); + MogoLocation endStation = new MogoLocation(); + endStation.setLongitude(endStationInfo.getGcjLon()); + endStation.setLatitude(endStationInfo.getGcjLat()); + TrajectoryAndDistanceManager.INSTANCE.setStationPoint(startStation, endStation, (long)lineId); + } + + private void cleanStation(String type) { + CallerLogger.d(M_BUS_P + TAG, "清理站点:"+type); + TrajectoryAndDistanceManager.INSTANCE.setStationPoint(null, null, -1L); + } + } diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java index 3c3db7fd66..6f9c029f3b 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java @@ -6,18 +6,14 @@ import com.mogo.och.bus.passenger.model.BusPassengerModel; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_DELAY; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_LINE_2S; -import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_LINE_1S; /** * Created on 2021/11/22 @@ -40,43 +36,6 @@ public class BusPassengerModelLoopManager { private CompositeDisposable mRouteWipeDisposable; private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 - public void startOrStopRouteAndWipe() { - CallerLogger.i(M_BUS_P + TAG, "startOrStopRouteWipe()"); - if (mRouteWipeDisposable != null) return; - if (mRouteWipeDisposable == null){ - mRouteWipeDisposable = new CompositeDisposable(); - } - Disposable disposable = startLoopRouteAndWipe() - .doOnSubscribe(new Consumer() { - @Override - public void accept(Disposable disposable) throws Exception { - } - }) - .doOnError(new Consumer() { - @Override - public void accept(Throwable throwable) throws Exception { - } - }) - .delay(LOOP_LINE_1S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Integer integer) throws Exception { - } - }); - mRouteWipeDisposable.add(disposable); - } - - public void stopOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - mRouteWipeDisposable.dispose(); - mRouteWipeDisposable = null; - } - } - public void startQueryDriverLineLoop() { if (mQueryLineDisposable != null && !mQueryLineDisposable.isDisposed()) { return; @@ -98,63 +57,4 @@ public class BusPassengerModelLoopManager { } } - public void startCalculateRouteInfoLoop() { - CallerLogger.i(M_BUS_P + TAG, "startCalculateRouteInfoLoop()"); - if (mCalculateRouteDisposable != null) return; - if (mCalculateRouteDisposable == null){ - mCalculateRouteDisposable = new CompositeDisposable(); - } - Disposable disposable = startLoopCalculateRouteInfo() - .doOnSubscribe(new Consumer() { - @Override - public void accept(Disposable disposable) throws Exception { - } - }) - .doOnError(new Consumer() { - @Override - public void accept(Throwable throwable) throws Exception { - } - }) - .delay(LOOP_LINE_2S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Integer integer) throws Exception { - } - }); - mCalculateRouteDisposable.add(disposable); - } - - public void stopCalculateRouteInfLoop() { - if (mCalculateRouteDisposable != null) { - CallerLogger.i(M_BUS_P + TAG, "stopCalculateRouteInfLoop()"); - mCalculateRouteDisposable.dispose(); - mCalculateRouteDisposable = null; - } - } - - private Observable startLoopRouteAndWipe(){ - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - if (emitter.isDisposed()) return; - BusPassengerModel.getInstance().loopRouteAndWipe(); - emitter.onComplete(); - } - }); - } - - private Observable startLoopCalculateRouteInfo(){ - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - if (emitter.isDisposed()) return; - BusPassengerModel.getInstance().dynamicCalculateRouteInfo(); - emitter.onComplete(); - } - }); - } } diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java index b6510fe011..e27d90bde7 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java @@ -7,14 +7,12 @@ import android.os.Looper; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; -import com.amap.api.maps.model.LatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.bus.passenger.bean.BusPassengerStation; import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback; import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback; import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback; @@ -146,13 +144,6 @@ public class BaseBusPassengerPresenter extends Presenter mView.hideNoTaskView()); } - @Override - public void routeResult(List models, int haveArrivedIndex) { - CallerLogger.d(M_BUS_P + TAG, "routeResult:" + models.size() - + " haveArrivedIndex = "+haveArrivedIndex); - runOnUIThread(() ->mView.routeResult(models,haveArrivedIndex)); - } - @Override public void routePlanningToNextStationChanged(long meters, long timeInSecond) { runOnUIThread(() -> mView.updateRoutePlanningToNextStation(meters, timeInSecond)); diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java deleted file mode 100644 index 49c38699ba..0000000000 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java +++ /dev/null @@ -1,365 +0,0 @@ -package com.mogo.och.bus.passenger.ui; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; - -import android.content.Context; -import android.os.Bundle; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.RelativeLayout; - -import androidx.annotation.Nullable; - -import com.amap.api.maps.AMap; -import com.amap.api.maps.CameraUpdate; -import com.amap.api.maps.CameraUpdateFactory; -import com.amap.api.maps.TextureMapView; -import com.amap.api.maps.UiSettings; -import com.amap.api.maps.model.BitmapDescriptor; -import com.amap.api.maps.model.BitmapDescriptorFactory; -import com.amap.api.maps.model.CameraPosition; -import com.amap.api.maps.model.CustomMapStyleOptions; -import com.amap.api.maps.model.LatLng; -import com.amap.api.maps.model.LatLngBounds; -import com.amap.api.maps.model.Marker; -import com.amap.api.maps.model.MarkerOptions; -import com.amap.api.maps.model.Polyline; -import com.amap.api.maps.model.PolylineOptions; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.bus.passenger.R; -import com.mogo.och.bus.passenger.callback.IBusPassengerMapViewCallback; -import com.mogo.och.bus.passenger.utils.BusPassengerMapAssetStyleUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * 乘客屏小地图 - */ -public class BusPassengerMapDirectionView - extends RelativeLayout - implements IMoGoChassisLocationGCJ02Listener, - IBusPassengerMapDirectionView, - AMap.OnCameraChangeListener { - - //小地图名称 - public static final String TAG = "TPMapDirectionView"; - - private TextureMapView mAMapNaviView; - private AMap mAMap; - private Marker mCarMarker; - - private List mCoordinatesLatLng = new ArrayList<>(); //轨迹坐标数据 - private List mLineStationLatLng = new ArrayList<>();//站点坐标数据 - private Polyline mPolyline; - private CameraUpdate mCameraUpdate; - private Context mContext; - - List textureList = new ArrayList<>(); - List texIndexList = new ArrayList<>(); - private int mHaveArrivedIndex = 0; - - private List mLineMarkers = new ArrayList<>(); - -// private IBusPassengerMapViewCallback mIBusPassengerMapViewCallback; - private BitmapDescriptor mArrivedRes; - private BitmapDescriptor mUnArrivedRes; - - public BusPassengerMapDirectionView(Context context) { - this(context, null); - } - - public BusPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public BusPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - try { - initView(context); - } catch (Exception e) { - e.printStackTrace(); - } - } - -// public void setTaxiPassengerMapViewCallback(IBusPassengerMapViewCallback iBusPassengerMapViewCallback) { -// this.mIBusPassengerMapViewCallback = iBusPassengerMapViewCallback; -// } - - private void initView(Context context) { - CallerLogger.d(M_BUS_P + TAG, "initView"); - - mContext = context; - - View smpView = LayoutInflater.from(context).inflate(R.layout.bus_p_map_view, this); - - mAMapNaviView = (TextureMapView) smpView.findViewById(R.id.bus_p_line_amap_view); - - initAMapView(); - - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, 10,this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - } - - private void initAMapView() { -// mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); - mAMap = mAMapNaviView.getMap(); - // 设置导航地图模式,aMap是地图控制器对象。 - mAMap.setMapType(AMap.MAP_TYPE_NIGHT); - - // 关闭显示实时路况图层,aMap是地图控制器对象。 - mAMap.setTrafficEnabled(false); - - // 设置 锚点 图标 - mCarMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_car)) - .anchor(0.5f, 0.5f)); - - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_arrived); - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_un_arrive); - - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(BusPassengerMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) - .setStyleExtraData(BusPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - - //设置希望展示的地图缩放级别 -// mAMap.moveCamera(mCameraUpdate); - - // 设置地图的样式 - UiSettings uiSettings = mAMap.getUiSettings(); - uiSettings.setZoomControlsEnabled(false);// 地图缩放级别的交换按钮 - uiSettings.setAllGesturesEnabled(false);// 所有手势 - uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮 - uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 - - mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { - @Override - public void onMapLoaded() { - CallerLogger.d(M_BUS_P + TAG, "smp---onMapLoaded"); - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(BusPassengerMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) - .setStyleExtraData(BusPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); - } - }); - - //设置地图状态的监听接口 - mAMap.setOnCameraChangeListener(this); - } - - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - return true; - } - - @Override - public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { - if (gnssInfo == null) { - return; - } -// CallerLogger.d(M_BUS_P + TAG, "onCarLocationChanged2 :" + location.getLatitude() + ":" + location.getLongitude()); - LatLng currentLatLng = new LatLng(gnssInfo.getLatitude(), gnssInfo.getLongitude()); - - //更新车辆位置 - if (mCarMarker != null) { -// CallerLogger.d(M_BUS_P + TAG, "location.getBearing() = " + location.getBearing()); - mCarMarker.setRotateAngle((float) (360 - gnssInfo.getHeading())); - mCarMarker.setPosition(currentLatLng); - mCarMarker.setToTop(); - } - - try { - //圈定地图显示范围 - LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); - - if (mCoordinatesLatLng.size() > 0){ - //存放经纬度 - for (int i = 0; i < mCoordinatesLatLng.size(); i++) { - boundsBuilder.include(mCoordinatesLatLng.get(i)); - } - //第二个参数为四周留空宽度 - }else if (mLineStationLatLng.size() > 0){ - for (int i = 0; i< mLineStationLatLng.size();i++){ - boundsBuilder.include(mLineStationLatLng.get(i)); - } - } - - boundsBuilder.include(currentLatLng); - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); - }catch (Exception e){ - - } - } - - - @Override - public void drawablePolyline() { - if (mPolyline != null) { - mPolyline.remove(); - } - if (mAMap != null) { - - addRouteColorList(); - CallerLogger.d(M_BUS_P + TAG, "mLinePointsLatLng.size() = " +mLineStationLatLng.size() - +" mCoordinatesLatLng.size()= " + mCoordinatesLatLng.size()); - if (mLineStationLatLng.size() >= 2 && mCoordinatesLatLng.size() >= 2) { - //设置线段纹理 - PolylineOptions polylineOptions = new PolylineOptions(); - polylineOptions.addAll(mCoordinatesLatLng); - polylineOptions.width(14); //线段宽度 - polylineOptions.setUseTexture(true); - polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); - polylineOptions.setCustomTextureList(textureList); - polylineOptions.setCustomTextureIndex(texIndexList); -// polylineOptions.colorValues(colorList); -// polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow)); - - // 绘制线 - mPolyline = mAMap.addPolyline(polylineOptions); - - } - } - } - - /** - * 添加画线颜色值 - */ - private void addRouteColorList() { - textureList.clear(); - texIndexList.clear(); - for (int i = 0; i < mCoordinatesLatLng.size(); i++){ - if (i <= mHaveArrivedIndex){ - textureList.add(mArrivedRes); - }else { - textureList.add(mUnArrivedRes); - } - texIndexList.add(i); - } - } - - @Override - public void clearPolyline() { - if (mPolyline != null) { - mPolyline.remove(); - } - } - - @Override - public void setLineMarker() { - - } - - public void clearCoordinatesLatLng(){ - textureList.clear(); - texIndexList.clear(); - mCoordinatesLatLng.clear(); - mLineStationLatLng.clear(); - CallerLogger.d(M_BUS_P + TAG, " mCoordinatesLatLng.clear " ); - } - - public void onCreateView(Bundle savedInstanceState) { - if (mAMapNaviView != null) { - mAMapNaviView.onCreate(savedInstanceState); - } - } - - public void onResume() { - if (mAMapNaviView != null) { - mAMapNaviView.onResume(); - } - } - - public void onPause() { - if (mAMapNaviView != null) { - mAMapNaviView.onPause(); - } - } - - public void onDestroy() { - if (mAMapNaviView != null) { - mAMapNaviView.onDestroy(); - } - } - - public void setCoordinatesLatLng(List latLngs,int haveArrivedIndex) { - mCoordinatesLatLng.clear(); - mCoordinatesLatLng.addAll(latLngs); - mHaveArrivedIndex = haveArrivedIndex; - } - - public void clearLineMarkers(){ - for (int i =0; i< mLineMarkers.size();i++){ - mLineMarkers.get(i).setVisible(false); - mLineMarkers.get(i).remove(); - } - mLineMarkers.clear(); - } - - public void setLinePointMarkerAndDraw(List mLineStationsList, int currentIndex) { - clearLineMarkers(); - mLineStationLatLng.clear(); - mLineStationLatLng.addAll(mLineStationsList); - - if (mLineStationsList.size() > 0){ - // 起点marker, 终点marker, 过站marker, 未过站marker - - int size = mLineStationsList.size(); - - Marker mStartMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_start_point))); - Marker mEndMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_end_point))); - - mStartMarker.setPosition(mLineStationsList.get(0)); - mLineMarkers.add(0,mStartMarker); - - for (int i = 0; i < mLineStationsList.size(); i++) { - if (currentIndex <= i && i < size-1 && i > 0){ //未到达 - Marker unArrivedMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_unarrived_point))); - unArrivedMarker.setPosition(mLineStationsList.get(i)); - mLineMarkers.add(i,unArrivedMarker); - }else if (i < currentIndex && i > 0){ - Marker arrivedMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrived_point))); - arrivedMarker.setPosition(mLineStationsList.get(i)); - mLineMarkers.add(i,arrivedMarker); - } - } - - mEndMarker.setPosition(mLineStationsList.get(size-1)); - mLineMarkers.add(size-1,mEndMarker); - } - } - - @Override - public void onCameraChange(CameraPosition cameraPosition) { -// mIBusPassengerMapViewCallback.onCameraChange(cameraPosition.bearing); - } - - @Override - public void onCameraChangeFinish(CameraPosition cameraPosition) { - - } -} diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index e9ec5996d3..2f132a90b1 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -24,6 +24,7 @@ import com.mogo.och.bus.passenger.adapter.BusPassengerLineStationsAdapter; import com.mogo.och.bus.passenger.constant.BusPassengerConst; import com.mogo.och.bus.passenger.presenter.BaseBusPassengerPresenter; import com.mogo.och.bus.passenger.ui.layoutmanager.CenterLayoutManager; +import com.mogo.och.bus.passenger.ui.mapdirectionview.BusPassengerMapDirectionView; import com.mogo.och.bus.passenger.utils.BPRouteDataTestUtils; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.wigets.MarqueeTextView; @@ -151,38 +152,13 @@ public class BusPassengerRouteFragment extends } } - public void routeResult(List latLngList,int haveArrivedIndex) { - if (latLngList.size() > 0) { - drawablePolyline(latLngList,haveArrivedIndex); - } else { - clearMapView(); - } - } - - /** - * 绘制 - * - * @param coordinates - */ - private void drawablePolyline(List coordinates,int haveArrivedIndex) { - if (mMapDirectionView != null) { - mMapDirectionView.setCoordinatesLatLng(coordinates,haveArrivedIndex); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mMapDirectionView.drawablePolyline(); - } - }); - } - } - public void clearMapView() { if (mMapDirectionView != null) { UiThreadHandler.post(new Runnable() { @Override public void run() { - mMapDirectionView.clearPolyline(); - mMapDirectionView.clearCoordinatesLatLng(); +// mMapDirectionView.clearPolyline(); +// mMapDirectionView.clearCoordinatesLatLng(); } }); } diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt new file mode 100644 index 0000000000..3f9595584c --- /dev/null +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt @@ -0,0 +1,349 @@ +package com.mogo.och.bus.passenger.ui.mapdirectionview + +import android.content.Context +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.RelativeLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.amap.api.maps.AMap +import com.amap.api.maps.TextureMapView +import com.amap.api.maps.model.BitmapDescriptor +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.CustomMapStyleOptions +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.LatLngBounds +import com.amap.api.maps.model.Marker +import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.Polyline +import com.amap.api.maps.model.PolylineOptions +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.ui.IBusPassengerMapDirectionView +import com.mogo.och.bus.passenger.utils.BusPassengerMapAssetStyleUtil + +/** + * 乘客屏小地图 + */ +class BusPassengerMapDirectionView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, + IBusPassengerMapDirectionView, AMap.OnCameraChangeListener, + MapDirectionViewModel.ItineraryViewCallback { + companion object { + //小地图名称 + const val TAG = "BusPassengerMapDirectionView" + } + + private lateinit var mAMapNaviView: TextureMapView + private lateinit var mAMap: AMap + private var mPolyline: Polyline? = null + private val mLineMarkers: MutableList = ArrayList() + private lateinit var mCarMarker: Marker + + private val mLineStationLatLng: MutableList = ArrayList() //站点坐标数据 + var textureList: MutableList = ArrayList() + var texIndexList: MutableList = ArrayList() + private var mArrivedRes: BitmapDescriptor? = null + private var mUnArrivedRes: BitmapDescriptor? = null + + private val routeArrived: MutableList = ArrayList() + private val routeArriving: MutableList = ArrayList() + private var location: MogoLocation? = null + + init { + try { + initView(context) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun initView(context: Context) { + d(SceneConstant.M_BUS_P + TAG, "initView") + val smpView = LayoutInflater.from(context).inflate(R.layout.bus_p_map_view, this) + mAMapNaviView = smpView.findViewById(R.id.bus_p_line_amap_view) as TextureMapView + initAMapView() + + // 注册定位监听 + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + // 注册定位监听 + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + } + + private fun initAMapView() { + mAMap = mAMapNaviView.map + // 设置导航地图模式,aMap是地图控制器对象。 + mAMap.mapType = AMap.MAP_TYPE_NIGHT + + // 关闭显示实时路况图层,aMap是地图控制器对象。 + mAMap.isTrafficEnabled = false + + // 设置 锚点 图标 + mCarMarker = mAMap.addMarker( + MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_car)) + .anchor(0.5f, 0.5f) + ) + mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_arrived) + mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_un_arrive) + + // 加载自定义样式 + val customMapStyleOptions = CustomMapStyleOptions() + .setEnable(true) + .setStyleData( + BusPassengerMapAssetStyleUtil.getAssetsStyle( + context, "map_style.data" + ) + ) + .setStyleExtraData( + BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( + context, "map_style_extra.data" + ) + ) + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions) + + // 设置地图的样式 + mAMap.uiSettings.apply { + isZoomControlsEnabled = false // 地图缩放级别的交换按钮 + setAllGesturesEnabled(true) // 所有手势 + isMyLocationButtonEnabled = false // 显示默认的定位按钮 + setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + } + + mAMap.setOnMapLoadedListener { + d(SceneConstant.M_BUS_P + TAG, "smp---onMapLoaded") + // 加载自定义样式 + val options = CustomMapStyleOptions() + .setEnable(true) + .setStyleData( + BusPassengerMapAssetStyleUtil.getAssetsStyle( + context, "map_style.data" + ) + ) + .setStyleExtraData( + BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( + context, "map_style_extra.data" + ) + ) + // 设置自定义样式 + mAMap.setCustomMapStyle(options) + mAMapNaviView.map.setPointToCenter( + mAMapNaviView.width / 2, + mAMapNaviView.height / 2 + ) + } + + //设置地图状态的监听接口 + mAMap.setOnCameraChangeListener(this) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MapDirectionViewModel::class.java) + } + viewModel?.setDistanceCallback(this) + } + + fun clearMapView() { + UiThreadHandler.post( { + clearPolyline() + clearCoordinatesLatLng() + }, UiThreadHandler.MODE.QUEUE) + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + if (mogoLocation == null) { + return + } + val currentLatLng = LatLng(mogoLocation.latitude, mogoLocation.longitude) + + //更新车辆位置 + mCarMarker.rotateAngle = (360 - mogoLocation.heading).toFloat() + mCarMarker.position = currentLatLng + mCarMarker.setToTop() + try { + //圈定地图显示范围 + val boundsBuilder = LatLngBounds.Builder() + routeArrived.forEach { + boundsBuilder.include(it) + } + routeArriving.forEach { + boundsBuilder.include(it) + } + mLineStationLatLng.forEach { + boundsBuilder.include(it) + } + boundsBuilder.include(currentLatLng) +// mAMap.moveCamera( +// CameraUpdateFactory.newLatLngBoundsRect( +// boundsBuilder.build(), +// 100, +// 100, +// 100, +// 100 +// ) +// ) + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun drawablePolyline() { + if (routeArrived.isEmpty() && routeArriving.isEmpty()) { + d(SceneConstant.M_TAXI + TAG, "没有点") + return + } + texIndexList.clear() + val allPoints = ArrayList(routeArrived) + for (i in routeArrived.indices) { + if (routeArrived.size > 1 && i < routeArrived.size - 1) { + texIndexList.add(0) + } + } + texIndexList.add(0) + location?.let { + allPoints.add(LatLng(it.latitude, it.longitude)) + } + allPoints.addAll(routeArriving) + for (ignored in routeArrived) { + texIndexList.add(1) + } + mPolyline?.let { + it.points = allPoints + it.options.customTextureIndex = texIndexList + return + } + if (textureList.isEmpty()) { + textureList.add(mArrivedRes) + textureList.add(mUnArrivedRes) + } + //设置线段纹理 + val polylineOptions = PolylineOptions().apply { + addAll(allPoints) + isUseTexture = true + width(15f) + lineCapType(PolylineOptions.LineCapType.LineCapRound) + customTextureList = textureList + customTextureIndex = texIndexList + } + + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions) + } + + override fun clearPolyline() { + mPolyline?.remove() + mPolyline = null + } + + override fun setLineMarker() {} + + fun clearCoordinatesLatLng() { + textureList.clear() + texIndexList.clear() + routeArrived.clear() + routeArriving.clear() + mLineStationLatLng.clear() + d(SceneConstant.M_BUS_P + TAG, " mCoordinatesLatLng.clear ") + } + + fun onCreateView(savedInstanceState: Bundle?) { + mAMapNaviView.onCreate(savedInstanceState) + } + + fun onResume() { + mAMapNaviView.onResume() + } + + fun onPause() { + mAMapNaviView.onPause() + } + + fun onDestroy() { + mAMapNaviView.onDestroy() + } + + override fun setCoordinatesLatLng( + routeArrived: List, + routeArriving: List, + location: MogoLocation? + ) { + this.routeArrived.clear() + this.routeArrived.addAll(routeArrived) + this.routeArriving.clear() + this.routeArriving.addAll(routeArriving) + this.location = location + UiThreadHandler.post({ + drawablePolyline() + }, UiThreadHandler.MODE.QUEUE) + } + + fun clearLineMarkers() { + for (i in mLineMarkers.indices) { + mLineMarkers[i].isVisible = false + mLineMarkers[i].remove() + } + mLineMarkers.clear() + } + + fun setLinePointMarkerAndDraw(mLineStationsList: List, currentIndex: Int) { + clearLineMarkers() + mLineStationLatLng.clear() + mLineStationLatLng.addAll(mLineStationsList) + if (mLineStationsList.isNotEmpty()) { + // 起点marker, 终点marker, 过站marker, 未过站marker + val size = mLineStationsList.size + val mStartMarker = mAMap.addMarker( + MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_start_point)) + ) + val mEndMarker = mAMap.addMarker( + MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_end_point)) + ) + mStartMarker.position = mLineStationsList[0] + mLineMarkers.add(0, mStartMarker) + for (i in mLineStationsList.indices) { + if (currentIndex <= i && i < size - 1 && i > 0) { //未到达 + val unArrivedMarker = mAMap.addMarker( + MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_unarrived_point)) + ) + unArrivedMarker.position = mLineStationsList[i] + mLineMarkers.add(i, unArrivedMarker) + } else if (i in 1 until currentIndex) { + val arrivedMarker = mAMap.addMarker( + MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrived_point)) + ) + arrivedMarker.position = mLineStationsList[i] + mLineMarkers.add(i, arrivedMarker) + } + } + mEndMarker.position = mLineStationsList[size - 1] + mLineMarkers.add(size - 1, mEndMarker) + } + } + + override fun onCameraChange(cameraPosition: CameraPosition) { + } + + override fun onCameraChangeFinish(cameraPosition: CameraPosition) {} + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/MapDirectionViewModel.kt b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/MapDirectionViewModel.kt new file mode 100644 index 0000000000..c1be106fb8 --- /dev/null +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/mapdirectionview/MapDirectionViewModel.kt @@ -0,0 +1,60 @@ +package com.mogo.och.bus.passenger.ui.mapdirectionview + +import androidx.lifecycle.ViewModel +import com.amap.api.maps.model.LatLng +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager + +class MapDirectionViewModel: ViewModel(), ITrajectoryListener { + + private val TAG = MapDirectionViewModel::class.java.simpleName + + private var viewCallback:ItineraryViewCallback?=null + + + init { + TrajectoryAndDistanceManager.addTrajectoryListener(TAG,this) + } + + fun setDistanceCallback(viewCallback:ItineraryViewCallback){ + this.viewCallback = viewCallback + } + + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + TrajectoryAndDistanceManager.removeListener(TAG) + } + + interface ItineraryViewCallback{ + fun setCoordinatesLatLng(routeArrived: List, routeArriving: List, location: MogoLocation?) + } + + override fun trajectoryCallback( + routeArrivied: MutableList, + routeArriving: MutableList, + location: MogoLocation + ) { + val routeArrivedTemp: MutableList = ArrayList() + val routeArrivingTemp: MutableList = ArrayList() + var temp: LatLng + for (mogoLocation in routeArrivied) { + temp = LatLng(mogoLocation.latitude, mogoLocation.longitude) + routeArrivedTemp.add(temp) + } + for (mogoLocation in routeArriving) { + temp = LatLng(mogoLocation.latitude, mogoLocation.longitude) + routeArrivingTemp.add(temp) + } + this.viewCallback?.setCoordinatesLatLng( + routeArrivedTemp, + routeArrivingTemp, + location + ) + CallerLogger.d(TAG,"已经走过的点routeArrivied:${routeArrivied.size} 未走过的点:routeArriving:${routeArriving.size}") + } + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java index ac7db3446d..fb81626293 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java @@ -49,8 +49,6 @@ public class BPRouteDataTestUtils { list.add(builder.build()); } BusPassengerModel.getInstance().updateRoutePoints(list); - BusPassengerModel.getInstance().startRemainRouteInfo(); - BusPassengerModel.getInstance().startToRouteAndWipe(); } catch (JSONException e) { e.printStackTrace(); } diff --git a/OCH/shuttle/passenger/src/jinlvvan/res/layout/bus_p_route_fragment.xml b/OCH/shuttle/passenger/src/jinlvvan/res/layout/bus_p_route_fragment.xml index 5ada0511f4..0215d426e2 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/res/layout/bus_p_route_fragment.xml +++ b/OCH/shuttle/passenger/src/jinlvvan/res/layout/bus_p_route_fragment.xml @@ -267,7 +267,7 @@ -