[3.4.0-map-sdk] add func of cross road

This commit is contained in:
zhongchao
2023-09-20 09:53:19 +08:00
parent eeeb7eb026
commit c84e4a8793
2 changed files with 66 additions and 35 deletions

View File

@@ -1,15 +1,19 @@
package com.mogo.eagle.core.function.call.map
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.zhidaoauto.map.data.road.StopLine
import java.util.concurrent.ConcurrentHashMap
import kotlin.properties.Delegates
object CallerMapRoadListenerManager {
interface OnRoadListener {
fun onRoadIdInfo(roadId: String)
fun onRoadIdInfo(roadId: String){}
fun onStopLineInfo(info: StopLine)
fun onStopLineInfo(info: StopLine){}
fun onRoadChange(cross: Boolean){}
}
private val listeners by lazy {
@@ -42,4 +46,18 @@ object CallerMapRoadListenerManager {
entry.value.onStopLineInfo(stopLine)
}
}
private var mCross: Boolean by Delegates.observable(false) { _, oldValue, newValue ->
if(oldValue != newValue){
Logger.d("emArrow","cross : $newValue")
listeners.forEach { entry ->
entry.value.onRoadChange(newValue)
}
}
}
fun invokeRoadChange(cross: Boolean) {
mCross = cross
}
}

View File

@@ -6,22 +6,21 @@ import android.os.Bundle
import android.text.TextUtils
import android.view.MotionEvent
import android.view.View
import chassis.Chassis
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager.setIsInit
import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager.invokeUploadLogFile
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnRoadIdGet
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnStopLineGet
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeRoadChange
import com.mogo.eagle.core.function.call.map.CallerMapRomaListener.invokeMapRomaStatus
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler
@@ -79,7 +78,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
private set
init {
i(SceneConstant.M_MAP + TAG, "AMapViewWrapper: init")
i(M_MAP + TAG, "AMapViewWrapper: init")
this.mMapView = mMapView
initViews()
initListeners()
@@ -89,7 +88,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
private fun initViews() {
// 初始化首次地图进入的时候的样式, MapAutoApi.INSTANCE.init(context, mapParams);将影响这里的数据
val mapStyle = mMapView.getMapStyleParams()!!.getStyleMode()
d(SceneConstant.M_MAP + TAG, "默认配置地图模式mapStyle=$mapStyle")
d(M_MAP + TAG, "默认配置地图模式mapStyle=$mapStyle")
when (mapStyle) {
MapAutoApi.MAP_STYLE_DAY -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY
MapAutoApi.MAP_STYLE_DAY_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_NAV
@@ -97,7 +96,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
MapAutoApi.MAP_STYLE_NIGHT_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_NAV
MapAutoApi.MAP_STYLE_DAY_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR
MapAutoApi.MAP_STYLE_NIGHT_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR
else -> e(SceneConstant.M_MAP + TAG, "暂不支持此地图模式默认使用VR夜间模式")
else -> e(M_MAP + TAG, "暂不支持此地图模式默认使用VR夜间模式")
}
}
@@ -112,7 +111,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
mMapView.setOnMapViewVisualAngleChangeListener(this)
mMapView.setOnRoadInfoListener(this, 1)
registerLogListener(this, mMapView.getEventController())
d(SceneConstant.M_MAP + TAG, "initListeners - setOnMapStyleListener - view $mMapView")
d(M_MAP + TAG, "initListeners - setOnMapStyleListener - view $mMapView")
}
override fun getMapView(): View {
@@ -125,17 +124,17 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
override fun onCreate(bundle: Bundle?) {
mMapView.onCreate(bundle)
d(SceneConstant.M_MAP + TAG, "map onCreate")
d(M_MAP + TAG, "map onCreate")
}
override fun onResume() {
mMapView.onResume()
d(SceneConstant.M_MAP + TAG, "map onResume")
d(M_MAP + TAG, "map onResume")
}
override fun onPause() {
mMapView.onPause()
d(SceneConstant.M_MAP + TAG, "map onPause")
d(M_MAP + TAG, "map onPause")
}
override fun onDestroy() {
@@ -148,12 +147,12 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
mMapView.setOnMapStyleListener(null)
mMapView.setOnMapViewVisualAngleChangeListener(null)
unregisterLogListener(this, mMapView.getEventController())
d(SceneConstant.M_MAP + TAG, "map onDestroy")
d(M_MAP + TAG, "map onDestroy")
}
override fun onSaveInstanceState(outState: Bundle) {
mMapView.onSaveInstanceState(outState)
d(SceneConstant.M_MAP + TAG, "map onSaveInstanceState")
d(M_MAP + TAG, "map onSaveInstanceState")
}
override fun onLowMemory() {}
@@ -166,7 +165,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
paramIndexes = [-1]
)
override fun onMapInit() {
i(SceneConstant.M_MAP + TAG, "onMapInit: ")
i(M_MAP + TAG, "onMapInit: ")
mogoMapListenerHandler.onMapLoaded()
}
@@ -178,7 +177,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
paramIndexes = [-1]
)
override fun onMapLoaded() {
i(SceneConstant.M_MAP + TAG, "onMapLoaded: ")
i(M_MAP + TAG, "onMapLoaded: ")
if (checkAMapView()) {
val cameraPosition = mMapView.getMapAutoViewHelper()!!
.getCameraPosition()
@@ -208,19 +207,33 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
}
}
private var roadCross:RoadCross? by Delegates.observable(null){ _,_,newValue ->
private var roadCross:RoadCross? by Delegates.observable(null){ _,oldValue,newValue ->
oldValue?.let {
//对驶入驶出路口做二次过滤,防止多次回调
if(it.status == 0 && newValue!!.status == 1){
//进入路口
i("$M_MAP$TAG","进入路口 :${newValue.cross_id}")
invokeRoadChange(true)
}
if((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue!!.cross_id_end)){
//驶出路口
i("$M_MAP$TAG","驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}")
invokeRoadChange(false)
}
}
}
override fun onRoadCrossInfo(roadCross: RoadCross?) {
d(SceneConstant.M_MAP + TAG, "onRoadCrossInfo:roadCross$roadCross")
d(M_MAP + TAG, "onRoadCrossInfo:roadCross$roadCross")
roadCross?.let {
this.roadCross = it
}
}
override fun onStopLineInfo(stopLine: StopLine?) {
stopLine?.let {
if(it.road_id.isNotEmpty() && it.points.size > 0){
d(SceneConstant.M_MAP + TAG, "onStopLineInfo: $it")
d(M_MAP + TAG, "onStopLineInfo: $it")
invokeListenersOnStopLineGet(it)
}
}
@@ -240,7 +253,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
override fun changeMapVisualAngle(angelMode: VisualAngleMode, mogoLatLng: MogoLatLng?) {
if(visualLock){
e(SceneConstant.M_MAP + TAG, "视角切换已锁定")
e(M_MAP + TAG, "视角切换已锁定")
return
}
val mapAutoViewHelper = mMapView.getMapAutoViewHelper()
@@ -248,7 +261,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
currentMapVisualAngle = angelMode
if (angelMode == VisualAngleMode.MODE_CLOSE_SIGHT) {
if (mogoLatLng == null) {
e(SceneConstant.M_MAP + TAG, "切换地图近景需要传入要移动的经纬度数据")
e(M_MAP + TAG, "切换地图近景需要传入要移动的经纬度数据")
return
}
// 近景传入经纬度为点击地图上静态marker经纬度数据为GPS坐标点。
@@ -296,16 +309,16 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
private fun checkAMapView(): Boolean {
if (mMapView.getMapAutoViewHelper() == null) {
e(SceneConstant.M_MAP + TAG, "自研mapView实例为空请检查")
e(M_MAP + TAG, "自研mapView实例为空请检查")
return false
}
return true
}
override fun moveToCenter(latLng: MogoLatLng, animate: Boolean) {
d(SceneConstant.M_MAP + TAG, "move to center $latLng")
d(M_MAP + TAG, "move to center $latLng")
if (latLng.lat == 0.0 || latLng.lon == 0.0) {
e(SceneConstant.M_MAP + TAG, "latLng = null or is illegal")
e(M_MAP + TAG, "latLng = null or is illegal")
return
}
if (checkAMapView()) {
@@ -315,7 +328,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
}
override fun showMyLocation(visible: Boolean) {
d(SceneConstant.M_MAP + TAG, "showMyLocation1 $visible")
d(M_MAP + TAG, "showMyLocation1 $visible")
// 如果是VR模式
if (isVrMold) {
return
@@ -339,7 +352,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
get() {
val isVrMode =
mCurrentUI === EnumMapUI.MAP_STYLE_NIGHT_VR || mCurrentUI === EnumMapUI.MAP_STYLE_DAY_VR
d(SceneConstant.M_MAP + TAG, "是否是VR模式: $isVrMode")
d(M_MAP + TAG, "是否是VR模式: $isVrMode")
return isVrMode
}
@@ -441,11 +454,11 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
return
}
if (isVrMold) {
w(SceneConstant.M_MAP + TAG, "vr 模式下忽略该设置")
w(M_MAP + TAG, "vr 模式下忽略该设置")
return
}
i(
SceneConstant.M_MAP + TAG,
M_MAP + TAG,
"showBounds : " + carPosition.toString() + " , " + bound.toShortString() + " , " + lockCarPosition
)
try {
@@ -461,7 +474,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
)
)
} catch (e: Exception) {
e(SceneConstant.M_MAP + TAG, " error : $e")
e(M_MAP + TAG, " error : $e")
}
}
@@ -555,7 +568,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
}
override fun onMapViewVisualAngleChange(type: Int) {
d(SceneConstant.M_MAP + TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().name)
d(M_MAP + TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().name)
currentMapVisualAngle = getVisualAngleMode(type)
mogoMapListenerHandler.onMapVisualAngleChanged(currentMapVisualAngle)
}
@@ -647,7 +660,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
* 加载3D模型
*/
private fun loadPreVehicleModel() {
d(SceneConstant.M_MAP + TAG, "添加感知模型到地图中……")
d(M_MAP + TAG, "添加感知模型到地图中……")
ThreadUtils.getIoPool().submit {
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI,
@@ -693,10 +706,10 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
} else {
map.addPreVehicleModel(typeTrafficId.type, typeTrafficId.traffic3DNightIconId)
}
d(SceneConstant.M_MAP + TAG, logMsg + preVehicleStrWeiZhi)
d(M_MAP + TAG, logMsg + preVehicleStrWeiZhi)
if (preVehicleStrWeiZhi == null) {
UiThreadHandler.postDelayed({
w(SceneConstant.M_MAP + TAG, "添加感知模型到地图中失败,尝试重复添加……")
w(M_MAP + TAG, "添加感知模型到地图中失败,尝试重复添加……")
addPreVehicleModelWeiZhi(typeTrafficId, logMsg)
}, 1000L)
}