[1.1.2]
[实时计算到终点距离]
This commit is contained in:
yangyakun
2023-02-28 12:16:36 +08:00
parent baf7b15fd7
commit 793b5fe417
5 changed files with 81 additions and 7 deletions

View File

@@ -0,0 +1,5 @@
package com.mogo.och.bus.passenger.callback
interface IDistanceTimeCallback {
fun setDistancecAndTime(meters:Long , timeInSecond:Long )
}

View File

@@ -16,7 +16,9 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager
import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
@@ -24,11 +26,14 @@ import com.mogo.och.bus.passenger.bean.LoopInfo
import com.mogo.och.bus.passenger.bean.response.*
import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
import com.mogo.och.bus.passenger.callback.IDistanceTimeCallback
import com.mogo.och.bus.passenger.constant.BusPassengerConst.Companion.Charter_AVERAGE_SPEED
import com.mogo.och.bus.passenger.net.BusPassengerModelLoopManager
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.biz.constant.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import system_master.SystemStatusInfo
@@ -67,11 +72,15 @@ object CharterPassengerModel {
// 轨迹信息 用来启动自动驾驶
private var locusInfo: LocusResponse.LocusInfo? = null
// 轨迹点、底盘透传的
private val mRoutePoints: MutableList<MogoLocation> = ArrayList()
private var orderStatus:OrderStatusEnum = OrderStatusEnum.NoOrderUnuse
private var orderStatusChangeListener:IOrderStatusChangeListener?=null
private var iDistanceTimeCallback: IDistanceTimeCallback?=null
fun init() {
initListeners()
queryLoginStatus()
@@ -111,6 +120,10 @@ object CharterPassengerModel {
mControllerStatusCallbackMap[tag] = callback
}
fun setiDistanceTimeCallback(distanceTimeCallback: IDistanceTimeCallback?){
this.iDistanceTimeCallback = distanceTimeCallback
}
/**
* 启动轮询查询司机登录状态
*/
@@ -185,15 +198,22 @@ object CharterPassengerModel {
private val moGoAutopilotPlanningListener: IMoGoPlanningRottingListener =
object : IMoGoPlanningRottingListener {
override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) {
CallerLogger.d(
M_BUS_P + TAG,
CallerLogger.d(M_BUS_P + TAG,
"onAutopilotRotting = ${GsonUtil.jsonFromObject(globalPathResp)}"
)
globalPathResp?.wayPointsList?.let {
startCalculateDistanceLoop()
if(it.size>0) {
updateRoutePoints(it)
}
}
}
}
fun updateRoutePoints(routePoints: List<MessagePad.Location?>?) {
mRoutePoints.clear()
val latLngModels = CoordinateCalculateRouteUtil
.coordinateConverterWgsToGcjLocations(mContext, routePoints)
mRoutePoints.addAll(latLngModels)
}
fun setStatusChangeListener(orderStatusChangeListener:IOrderStatusChangeListener?){
this.orderStatusChangeListener = orderStatusChangeListener
}
@@ -433,7 +453,7 @@ object CharterPassengerModel {
}
/**
* 结束时间校准轮训
* 结束启动路距计算
*/
private fun endCalculateDistanceLoop() {
BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE)
@@ -443,7 +463,45 @@ object CharterPassengerModel {
* 查询车辆状态 判断订单是否结束、是否显示结束业务
*/
private fun calculateDistance() {
// TODO: 启动轨迹计算
mLocation?.let {
// 启动轨迹计算
//当前站在轨迹中对应的点
val currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew(
0, mRoutePoints, it.latitude, it.longitude
)
//要前往的站在轨迹中对应的点
var nextRouteIndex:Int = mRoutePoints.size-1
orderInfo?.let {
val wgS84ToGCJ02 = CoordinateTransform.WGS84ToGCJ02(it.wgs84Lon, it.wgs84Lat)
nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew(
currentRouteIndex, mRoutePoints, wgS84ToGCJ02[0], wgS84ToGCJ02[1]
)
}
var lastSumLength = 0f
if(currentRouteIndex<nextRouteIndex){//
val subList = mRoutePoints.subList(currentRouteIndex, nextRouteIndex)
val middlePoingDistancee = CoordinateCalculateRouteUtil.calculateRouteSumLength(subList)
val lastPoints = mRoutePoints.get(currentRouteIndex)
lastSumLength = CoordinateUtils.calculateLineDistance(
lastPoints.longitude, lastPoints.latitude,
it.longitude, it.latitude
)+middlePoingDistancee
}else{
val lastPoints = mRoutePoints.get(nextRouteIndex)
lastSumLength = CoordinateUtils.calculateLineDistance(
lastPoints.longitude, lastPoints.latitude,
it.longitude, it.latitude
)
}
val lastTime: Double = lastSumLength / Charter_AVERAGE_SPEED * 3.6 //秒
CallerLogger.d(
SceneConstant.M_BUS_P + "calculateDistance",
"---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime
+ " thread = " + Thread.currentThread().name
)
iDistanceTimeCallback?.setDistancecAndTime(lastSumLength.toLong(),lastTime.toLong())
}
}
// endregion

View File

@@ -4,6 +4,7 @@ import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
import com.mogo.och.bus.passenger.callback.IDistanceTimeCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.ui.MainFragment
import com.mogo.och.common.module.utils.DateTimeUtil
@@ -12,12 +13,13 @@ import java.util.*
class BusPassengerPresenter(view: MainFragment?) :
BusBasePassengerFunctionDevicePresenter<MainFragment?>(view),
IBusPassengerControllerStatusCallback {
IBusPassengerControllerStatusCallback, IDistanceTimeCallback {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.init()
// 定位监听
CharterPassengerModel.setControllerStatusCallback(TAG,this)
CharterPassengerModel.setiDistanceTimeCallback(this)
//BusPassengerModel.setMoGoAutopilotPlanningListener(this)
}
@@ -25,6 +27,7 @@ class BusPassengerPresenter(view: MainFragment?) :
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
CharterPassengerModel.setControllerStatusCallback(TAG,null)
CharterPassengerModel.setiDistanceTimeCallback(null)
}
private fun setSpeed(speed:Float){
UiThreadHandler.post {
@@ -47,7 +50,7 @@ class BusPassengerPresenter(view: MainFragment?) :
/**
* 计算剩余距离和剩余时间
*/
fun routePlanningToNextStationChanged(meters: Long, timeInSecond: Long) {
override fun setDistancecAndTime(meters: Long, timeInSecond: Long) {
var dis: String? = "0"
var disUnit = "KM"
if (meters > 0) {

View File

@@ -32,9 +32,14 @@
android:id="@+id/m1_order_early_end"
android:visibility="gone"
layout="@layout/m1_order_early_end"/>
<include
android:id="@+id/m1_order_noorder"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
layout="@layout/m1_order_noorder"/>

View File

@@ -16,6 +16,9 @@ class BusPassengerConst {
const val LOOP_LINE_1S = 1 * 1000L
const val LOOP_DELAY = 100L
//M1的平均里程15km/h
const val Charter_AVERAGE_SPEED = 15
// 订单总里程
const val BUS_SP_KEY_ORDER_SUM_DIS = "BUS_SP_KEY_ORDER_SUM_DIS"