[6.5.0][道路事件] 优化路口视角切换逻辑

This commit is contained in:
renwj
2024-07-15 19:41:04 +08:00
parent 0333bc9d6b
commit 94de2bf322

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.function.call.map.* import com.mogo.eagle.core.function.call.map.*
import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.kotlin.*
import com.mogo.map.MapDataWrapper
import com.zhidaoauto.map.data.road.StopLine import com.zhidaoauto.map.data.road.StopLine
import com.zhidaoauto.map.sdk.open.common.tools.MapTools import com.zhidaoauto.map.sdk.open.common.tools.MapTools
import kotlinx.coroutines.* import kotlinx.coroutines.*
@@ -45,14 +46,15 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
private val listener = object : IMoGoMapRoadListener { private val listener = object : IMoGoMapRoadListener {
private val roadId = AtomicReference<String>() private val roadId = AtomicReference<String>()
private val triggerRoadId = AtomicReference<String>() private val triggerRoadId = AtomicReference<String>()
private var inCrossRoad = false
override fun onRoadIdInfo(roadId: String) { override fun onRoadIdInfo(roadId: String) {
this.roadId.set(roadId) this.roadId.set(roadId)
Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId") Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId")
val loc = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
var triggerClose = false var triggerClose = false
val distance = distanceOfCarToStopLine.get() + 5 var distance = distanceOfCarToStopLine.get()
if (hasCrossRoad && distance > 0) { if (hasCrossRoad && distance > 0) {
distance += 3.0
val prev = triggerLocation.get() val prev = triggerLocation.get()
if (prev != null) { if (prev != null) {
travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get()) travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get())
@@ -60,19 +62,34 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
} }
val oldRoadId = triggerRoadId.get() val oldRoadId = triggerRoadId.get()
Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}") Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}")
if ((travelled.get() > distance) && oldRoadId != roadId) { if ((travelled.get() > distance)) {
distanceOfCarToStopLine.set(0.0) val cross = MapDataWrapper.getCrossRoad(loc.longitude, loc.latitude, loc.heading)
hasCrossRoad = false Log.d(TAG, "-- onRoadIdInfo --: cross --: ${cross?.status}")
triggerRoadId.set(null) if (cross?.status == 1) {
travelled.set(0.0) if (!inCrossRoad) {
triggerLocation.set(null) inCrossRoad = true
Log.d(TAG, "-- onRoadIdInfo --: trigger close --") }
triggerClose = true } else {
if (inCrossRoad) {
triggerClose = true
}
if (!triggerClose && roadId != "0" && oldRoadId != null && oldRoadId != roadId) {
triggerClose = true
}
}
if (triggerClose) {
Log.d(TAG, "-- onRoadIdInfo --: trigger close --")
distanceOfCarToStopLine.set(0.0)
hasCrossRoad = false
triggerRoadId.set(null)
travelled.set(0.0)
triggerLocation.set(null)
inCrossRoad = false
changeScene(Default())
}
} }
} }
if (triggerClose) {
changeScene(Default())
}
} }
@@ -80,11 +97,16 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
Log.d(TAG, "-- onStopLineInfo --: ${info.distance}") Log.d(TAG, "-- onStopLineInfo --: ${info.distance}")
if (!hasCrossRoad && info.distance <= 80.0) { if (!hasCrossRoad && info.distance <= 80.0) {
hasCrossRoad = true hasCrossRoad = true
triggerRoadId.set(this.roadId.get())
distanceOfCarToStopLine.set(info.distance)
triggerLocation.set(CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02())
changeScene(CrossRoad(2)) changeScene(CrossRoad(2))
} }
if (hasCrossRoad && triggerRoadId.get() == null && info.distance <= 20) {
val roadId = this.roadId.get()
if (roadId != null && roadId != "0") {
triggerRoadId.set(this.roadId.get())
distanceOfCarToStopLine.set(info.distance)
triggerLocation.set(CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84())
}
}
} }
} }