package com.xw.yunwei.ui.work.checkInMission.viewmodel
|
|
import android.app.Application
|
import androidx.lifecycle.MutableLiveData
|
import com.amap.api.maps.model.LatLng
|
import com.amap.api.navi.model.NaviPoi
|
import com.xw.common.base.BaseViewModel
|
import com.xw.yunwei.model.CheckInMissionPointInfo
|
import com.xw.yunwei.model.RoutePlanningOperationInfo
|
import com.xw.yunwei.net.WorkRepository
|
import com.xw.yunwei.ui.work.checkInMission.CruiseCheckInActivity
|
import org.koin.core.component.inject
|
|
class RoutePlanningViewModel(application: Application) : BaseViewModel(application) {
|
val workRepository: WorkRepository by inject()
|
var id: String = ""
|
var points: List<CheckInMissionPointInfo> = listOf()
|
|
//起点
|
var startPoint: NaviPoi? = null
|
|
//是否选中步行
|
var checkWalk = MutableLiveData(true)
|
|
//算好的路线
|
val naviPaths = MutableLiveData(mutableMapOf<Int, RoutePlanningOperationInfo>())
|
|
//是否能导航
|
val couldNavi = MutableLiveData(false)
|
|
//获取路径规划终点
|
fun getRoutePlanningEndPoint(): NaviPoi? {
|
return points.lastOrNull { !it.hadCheckIn() }?.let {
|
NaviPoi(
|
"终点",
|
LatLng(it.lat?.toDoubleOrNull() ?: 0.0, it.lon?.toDoubleOrNull() ?: 0.0),
|
""
|
)
|
}?.takeIf {
|
it.coordinate.latitude != 0.0 && it.coordinate.longitude != 0.0
|
}
|
}
|
|
//获取路径规划途经点
|
fun getRoutePlanningPassingPoints(): List<NaviPoi> {
|
val endPoint = getRoutePlanningEndPoint()
|
return points.filter { !it.hadCheckIn() }.mapIndexed { index, info ->
|
NaviPoi(
|
"途经点${index + 1}",
|
LatLng(info.lat?.toDoubleOrNull() ?: 0.0, info.lon?.toDoubleOrNull() ?: 0.0),
|
""
|
)
|
}.filter {
|
it.coordinate.latitude != 0.0 && it.coordinate.longitude != 0.0 && it.coordinate != endPoint?.coordinate
|
}
|
}
|
|
//导航
|
fun navigate(startPoint: NaviPoi) {
|
naviPaths.value?.getValue(if (checkWalk.value ?: false) 0 else 1)?.let {
|
startActivity(
|
CruiseCheckInActivity::class.java,
|
CruiseCheckInActivity.getParams(
|
id,
|
points,
|
startPoint,
|
it.endPoint,
|
it.passingPoints,
|
it.type
|
)
|
)
|
finish()
|
}
|
}
|
}
|