add new field

This commit is contained in:
zhongchao
2021-11-20 17:25:53 +08:00
parent 5707d1b5fb
commit fa549fe02f
12 changed files with 105 additions and 91 deletions

View File

@@ -4,16 +4,16 @@ import android.content.Context
import android.location.Location
import android.os.Handler
import android.os.Looper
import com.mogo.cloud.commons.utils.CoordinateUtils
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.data.trafficlight.RoadIDResult
import com.mogo.eagle.core.data.trafficlight.TrafficLightDetail
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.data.trafficlight.isInRange
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightHMIManager
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_LOOP_SEARCH_CROSS_ROAD
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_STOP_SEARCH_CROSS_ROAD
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT
import com.mogo.eagle.core.function.v2x.trafficlight.network.TrafficLightNetWorkModel
import com.mogo.map.navi.IMogoCarLocationChangedListener2
import com.mogo.module.common.MogoApisHandler
@@ -33,9 +33,11 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
private var mContext: Context? = null
private val trafficLightNetWorkModel = TrafficLightNetWorkModel()
private var mLocation: Location? = null
private var roadId: String? = null
private var roadIDResult: RoadIDResult? = null
private var trafficLightResult: TrafficLightResult? = null
private var inRange: Boolean = false
private var mThreadHandler: Handler? = null
fun initServer(context: Context) {
@@ -53,9 +55,10 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
val tileId = MogoApisHandler.getInstance().apis
.mapServiceApi.mapUIController.getTileId(it.longitude, it.latitude)
trafficLightNetWorkModel.requestRoadID(
tileId, it.latitude, it.longitude, it.bearing.toDouble(), {
tileId, it.latitude, it.longitude, it.bearing.toDouble(),
{
mThreadHandler?.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_CROSS_ROAD)
roadId = it
roadIDResult = it
},
{
Logger.e(TAG, "request road id error : $it")
@@ -69,7 +72,8 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
}, {
//start loop traffic light
mLocation?.let {
val road = if (roadId.isNullOrBlank()) "" else roadId!!
val road =
if (roadIDResult?.rsCrossId.isNullOrBlank()) "" else roadIDResult?.rsCrossId
trafficLightNetWorkModel.requestTrafficLight(
it.latitude, it.longitude, it.bearing.toDouble(), road, { result ->
trafficLightResult = result
@@ -97,6 +101,28 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
mThreadHandler?.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 5_000L)
}
private fun checkOutOfRange() {
mLocation?.let { loc ->
roadIDResult?.let {
// 检测是否开过路口,开过路口则停止读灯。并重置 trafficLightResult 值为 null
// trafficLightResult != null &&
if (it.isInRange(loc.latitude, loc.longitude)) {
inRange = true
Logger.d("arrowtest", "进入路口")
return
}
if (inRange) {
Logger.d("arrowtest", "离开路口")
inRange = false
trafficLightResult = null
TrafficLightHMIManager.INSTANCE.hideTrafficLight()
CallTrafficLightListenerManager.resetTrafficLightData()
mThreadHandler?.sendEmptyMessage(TrafficLightThreadHandler.MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT)
}
}
}
}
fun getTrafficLightCurrentState(): TrafficLightDetail? {
trafficLightResult?.let {
return it.laneList
@@ -121,20 +147,7 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
override fun onCarLocationChanged2(latLng: Location?) {
latLng?.let {
mLocation = latLng
// 检测是否开过路口,开过路口则停止读灯。并重置 trafficLightResult 值为 null
if (trafficLightResult != null
&& (CoordinateUtils.calculateLineDistance(
it.longitude, it.latitude,
trafficLightResult!!.lon, trafficLightResult!!.lat
) < 10)
) {
Logger.d(TAG, "开过路口")
trafficLightResult = null
TrafficLightHMIManager.INSTANCE.hideTrafficLight()
CallTrafficLightListenerManager.resetTrafficLightData()
mThreadHandler?.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT)
}
checkOutOfRange()
}
}
@@ -142,7 +155,6 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
mThreadHandler = null
mContext = null
mLocation = null
roadId = null
trafficLightResult = null
}

View File

@@ -4,16 +4,16 @@ import com.google.gson.Gson
import com.mogo.cloud.network.RetrofitFactory
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.BaseResponse
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.data.trafficlight.*
import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightConst
import com.mogo.utils.logger.Logger
import com.mogo.module.common.constants.HostConst.CITY_HOST
import com.mogo.utils.network.apiCall
import com.mogo.utils.network.cancel
import com.mogo.utils.network.request
class TrafficLightNetWorkModel {
private fun getNetWorkApi(baseUrl: String = TrafficLightConst.getNetHost()): TrafficLightApiService {
private fun getNetWorkApi(baseUrl: String = CITY_HOST): TrafficLightApiService {
return RetrofitFactory.getInstanceNoCallAdapter(baseUrl)!!
.create(TrafficLightApiService::class.java)
}
@@ -23,7 +23,7 @@ class TrafficLightNetWorkModel {
lat: Double,
lon: Double,
bearing: Double,
onSuccess: ((String) -> Unit),
onSuccess: ((RoadIDResult) -> Unit),
onError: ((String) -> Unit),
) {
request<BaseResponse<RoadIDResult>>("requestRoadID") {
@@ -40,9 +40,9 @@ class TrafficLightNetWorkModel {
}
onSuccess {
if (it.result != null) {
if(it.result.rsCrossId.isNotEmpty()){
onSuccess.invoke(it.result.rsCrossId)
}else{
if (it.result.rsCrossId.isNotEmpty() && !it.result.rectLatLngs.isNullOrEmpty()) {
onSuccess.invoke(it.result)
} else {
onError.invoke("requestRoadID result rsCrossId is null")
}
} else {
@@ -65,13 +65,16 @@ class TrafficLightNetWorkModel {
lat: Double,
lon: Double,
bearing: Double,
roadId: String,
roadId: String?,
onSuccess: ((TrafficLightResult) -> Unit),
onError: ((String) -> Unit),
) {
request<BaseResponse<TrafficLightResult>>("requestTrafficLight") {
val map = hashMapOf<String, String>()
start {
if(roadId == null){
return@start
}
val trafficLightRequestData = TrafficLightRequestData(lat, lon, bearing, roadId)
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
map["data"] = Gson().toJson(trafficLightRequestData)

View File

@@ -1,26 +0,0 @@
package com.mogo.eagle.core.function.v2x.vip
import com.mogo.commons.debug.DebugConfig
class VipConst {
companion object {
const val MODULE_NAME = "MODULE_V2X_VIP"
private const val HOST_DEV = "http://dzt-test.zhidaozhixing.com"
private const val HOST_TEST = "http://dzt-test.zhidaozhixing.com"
private const val HOST_DEMO = "http://dzt-show.zhidaozhixing.com"
private const val HOST_PRODUCT = "http://dzt.zhidaozhixing.com"
fun getNetHost(): String {
return when (DebugConfig.getNetMode()) {
DebugConfig.NET_MODE_DEV -> HOST_DEV
DebugConfig.NET_MODE_QA -> HOST_TEST
DebugConfig.NET_MODE_DEMO -> HOST_DEMO
else -> HOST_PRODUCT
}
}
}
}

View File

@@ -3,13 +3,13 @@ package com.mogo.eagle.core.function.v2x.vip.network
import com.mogo.cloud.network.RetrofitFactory
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.BaseResponse
import com.mogo.eagle.core.function.v2x.vip.VipConst
import com.mogo.module.common.constants.HostConst.DATA_SERVICE_HOST
import com.mogo.utils.network.apiCall
import com.mogo.utils.network.request
class VipNetWorkModel {
private fun getNetWorkApi(baseUrl: String = VipConst.getNetHost()): VipApiService {
private fun getNetWorkApi(baseUrl: String = DATA_SERVICE_HOST): VipApiService {
return RetrofitFactory.getInstanceNoCallAdapter(baseUrl)!!
.create(VipApiService::class.java)
}