[3.4.0-map-sdk] add func of cross road
This commit is contained in:
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user