From d5498f8ce6a4790161b0c2366dd1d83b17fe998f Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 20 Jun 2025 15:39:55 +0800 Subject: [PATCH] =?UTF-8?q?[8.1.0][opt]=E8=A7=A3=E5=86=B3=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=90=8E=E7=9A=84=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/bridge/bridge/OchBridgeManager.kt | 88 ++++++++++++++++-- .../src/main/res/raw/parking_model.nt3d | Bin 0 -> 26917 bytes .../eagle/core/function/view/MapBizView.kt | 9 ++ .../src/main/java/com/mogo/map/IMogoMap.kt | 2 + .../src/main/java/com/mogo/map/AMapWrapper.kt | 4 + 5 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 OCH/common/bridge/src/main/res/raw/parking_model.nt3d diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt index 8955f6fcd7..81d81dde15 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt @@ -1,33 +1,56 @@ package com.mogo.och.bridge.bridge +import com.mogo.commons.env.ProjectUtils +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningTrajectoryListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getWgs84Lat +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getWgs84Lon +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.map.MogoMap +import com.mogo.map.MogoMap.Companion.mapInstance +import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils +import com.mogo.map.overlay.core.Level +import com.mogo.map.overlay.point.Point import com.mogo.och.bridge.BridgeServiceManager -import com.mogo.och.common.module.manager.loop.BizLoopManager -import com.mogo.och.common.module.manager.loop.LoopInfo -import io.reactivex.schedulers.Schedulers +import com.mogo.och.bridge.R import prediction2025.Prediction2025 import mogo.telematics.pad.MessagePad import kotlin.properties.Delegates -object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener { +object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener, + IMoGoAutopilotPlanningActionsListener { private val TAG = "${M_OCHCOMMON}OchPlanningListenerManager" - private var trajectoryTime = 0L private var predictionTime = 0L + private val map by lazy { + mapInstance.getMogoMap(MogoMap.DEFAULT) + } + + @Volatile + private var lastTime: Long = 0L + + @Volatile + private var isHide = false + fun load(){ CallerPlanningTrajectoryListenerManager.addListener(TAG,this) CallerAutopilotIdentifyListenerManager.addListener(TAG,this) - BizLoopManager.setLoopFunction(TAG, LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io())) + CallerPlanningActionsListenerManager.addListener(TAG, this) } - fun release(){ + fun release() { CallerPlanningTrajectoryListenerManager.removeListener(TAG) CallerAutopilotIdentifyListenerManager.removeListener(TAG) } @@ -84,5 +107,54 @@ object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentify } } - + override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { + if (System.currentTimeMillis() - lastTime >= 1000) { + lastTime = System.currentTimeMillis() + // Saas乘客屏且是自驾中 + if (ProjectUtils.isSaas() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + ) { + if (CallerAutoPilotStatusListenerManager.getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + CallerMapUIServiceManager.getOverlayManager()?.hidePoint("RenderParkingModel") + isHide = true + } else { + val lonLatArr = map?.switchData( + planningActionMsg.updatedTerminal.x, + planningActionMsg.updatedTerminal.y, + false + ) + lonLatArr?.let { + if (it.size < 2) { + CallerMapUIServiceManager.getOverlayManager()?.hidePoint("RenderParkingModel") + isHide = true + return@let + } + // 只处理100m以内的 + if (DrivingDirectionUtils.distance(it[0], it[1], getWgs84Lon(), getWgs84Lat()) >= 100) { + CallerMapUIServiceManager.getOverlayManager()?.hidePoint("RenderParkingModel") + isHide = true + return@let + } + // owner、level、id作为key去从缓存中取 + val builder = + Point.Options.Builder("TYPE_MARKER_PNC", Level.DEFAULT) + .setId("RenderParkingModel") + .anchor(0.5f, 0.5f) + .set3DMode(true) + .isUseGps(true) + .controlAngle(true) + .rotate(map!!.convertAngle(planningActionMsg.parkingLotHeading, it[0], it[1]).toFloat()) + .icon3DRes(R.raw.parking_model) + .longitude(it[0]) + .latitude(it[1]) + CallerMapUIServiceManager.getOverlayManager() + ?.showOrUpdatePoint(builder.build()) + if (isHide) { + CallerMapUIServiceManager.getOverlayManager()?.showPoint("RenderParkingModel") + isHide = false + } + } + } + } + } + } } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/res/raw/parking_model.nt3d b/OCH/common/bridge/src/main/res/raw/parking_model.nt3d new file mode 100644 index 0000000000000000000000000000000000000000..ba34aa92fd57de927d26f8c037690b984a75e709 GIT binary patch literal 26917 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapBizView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapBizView.kt index bb2c9ed3b9..7dc7253c1f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapBizView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapBizView.kt @@ -19,6 +19,7 @@ import com.mogo.eagle.core.function.view.CoordinateAnimationView.Companion import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.map.MogoMap +import com.mogo.map.MogoMap.Companion.mapInstance import com.mogo.map.MogoMapView import com.mogo.map.overlay.line.Polyline import com.mogo.map.overlay.point.Point @@ -36,6 +37,9 @@ open class MapBizView(context: Context?, attrs: AttributeSet?) : MogoMapView(con private const val TAG = "MapBizView" } + @Volatile + private var lastTime: Long = 0L + override fun onCreate(bundle: Bundle?) { super.onCreate(bundle) map?.uiController?.showMyLocation(true) @@ -110,6 +114,11 @@ open class MapBizView(context: Context?, attrs: AttributeSet?) : MogoMapView(con override fun onChassisLocationWGS84(gnssInfo: MogoLocation) { // 跟新地图控件 setExtraGPSData(gnssInfo) + if (System.currentTimeMillis() - lastTime >= 5000) { + // 预测给的UTM坐标数据没有带上度带信息,根据定位计算度带 + mapInstance.getMogoMap()?.switchData(gnssInfo.longitude, gnssInfo.latitude, true) + lastTime = System.currentTimeMillis() + } accLimit = gnssInfo.acceleration < accThreshold } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt index eee573e182..cefa4089e1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt @@ -72,6 +72,8 @@ interface IMogoMap { fun switchData(x: Double, y: Double, isWgs84: Boolean): DoubleArray? + fun convertAngle(angle: Double, lon: Double, lat: Double): Double + /** * 和高精地图SDK配置的默认坐标系MapParams.setCoordinateType()有关,方法暂不支持传入当前的坐标系 */ diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt index d3a4d4fb54..77df2349d5 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt @@ -247,6 +247,10 @@ class AMapWrapper(map: MapAutoViewHelper?, mapView: MapAutoView, controller: IMo return mAMap?.switchData(x, y, isWgs84) } + override fun convertAngle(angle: Double, lon: Double, lat: Double): Double { + return MapTools.convertAngle(angle, lon, lat) + } + override fun toScreenLocations(data: List): List { return MapTools.toScreenLocations(data, mMapView.getMapController()) }