diff --git a/core/function-impl/mogo-core-function-map/build.gradle b/core/function-impl/mogo-core-function-map/build.gradle index 0cf2df7226..522a2f928b 100644 --- a/core/function-impl/mogo-core-function-map/build.gradle +++ b/core/function-impl/mogo-core-function-map/build.gradle @@ -50,7 +50,6 @@ dependencies { implementation rootProject.ext.dependencies.rxandroid kapt rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.adasHigh if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { @@ -58,11 +57,13 @@ dependencies { implementation rootProject.ext.dependencies.mogo_core_utils implementation rootProject.ext.dependencies.mogo_core_function_api implementation rootProject.ext.dependencies.mogo_core_function_call + implementation rootProject.ext.dependencies.modulecommon } else { implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-utils') implementation project(':core:mogo-core-function-api') implementation project(':core:mogo-core-function-call') + implementation project(':modules:mogo-module-common') } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/map/MoGoLocationUpdater4AutoPilot.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/map/MoGoLocationUpdater4AutoPilot.kt new file mode 100644 index 0000000000..6f0ddd336d --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/map/MoGoLocationUpdater4AutoPilot.kt @@ -0,0 +1,34 @@ +package com.mogo.eagle.core.function.impl.map + +import android.content.Context +import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.map.location.IMoGoLocationUpdater4AutoPilot +import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.module.common.MogoApisHandler +import com.mogo.service.IMogoServiceApis + + +@Route(path = MogoServicePaths.PATH_MAP_LOCATION_UPDATE_4_AUTO_PILOT) +class MoGoLocationUpdater4AutoPilot: IMoGoLocationUpdater4AutoPilot { + + private val TAG = "MoGoLocationUpdater4AutoPilot" + + override val functionName = TAG; + + private val api: IMogoServiceApis? by lazy { + MogoApisHandler.getInstance().apis + } + + override fun updateLocation(location: Any?) { + api?.mapServiceApi?.getSingletonLocationClient(Utils.getApp())?.updateLocation(location); + } + + override fun init(context: Context?) { + //DO NOTING + } + + override fun onDestroy() { + //DO NOTHING + } +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java index 054d5baa03..85a09fc499 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java @@ -386,4 +386,12 @@ public class MogoServicePaths { @Keep @Deprecated public static final String PATH_AI_MONITORING = "/monitoring/api"; + + + /** + * 自动驾驶时,定位信息改变要同步更新 + */ + @Keep + @Deprecated + public static final String PATH_MAP_LOCATION_UPDATE_4_AUTO_PILOT = "/map_x/location_update"; } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/location/IMoGoLocationUpdater4AutoPilot.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/location/IMoGoLocationUpdater4AutoPilot.kt new file mode 100644 index 0000000000..6e5e77deb1 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/location/IMoGoLocationUpdater4AutoPilot.kt @@ -0,0 +1,13 @@ +package com.mogo.eagle.core.function.api.map.location + +import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider + +/** + * @author renwj + * @date 2021/11/04 16:10 下午 + * 此类主要用来同步自动驾驶定位信息给各业务方 + */ +interface IMoGoLocationUpdater4AutoPilot : IMoGoFunctionServerProvider { + + fun updateLocation(location: Any?) +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerLocationUpdaterManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerLocationUpdaterManager.kt new file mode 100644 index 0000000000..2532c984c2 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerLocationUpdaterManager.kt @@ -0,0 +1,18 @@ +package com.mogo.eagle.core.function.call.map + +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.map.location.IMoGoLocationUpdater4AutoPilot +import com.mogo.eagle.core.function.call.base.CallerBase + +object CallerLocationUpdaterManager { + + private val updater : IMoGoLocationUpdater4AutoPilot? by lazy { + CallerBase.getApiInstance( + IMoGoLocationUpdater4AutoPilot::class.java, + MogoServicePaths.PATH_MAP_LOCATION_UPDATE_4_AUTO_PILOT) + } + + fun updateLocation(location: Any?) { + updater?.updateLocation(location); + } +} \ No newline at end of file diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java index 09dc44b3cd..c0203db541 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java @@ -23,6 +23,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.commons.constants.SharedPrefsConstants; import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.function.call.map.CallerLocationUpdaterManager; import com.mogo.map.IMogoMap; import com.mogo.map.IMogoMapView; import com.mogo.map.impl.custom.location.GpsTester; @@ -1076,6 +1077,7 @@ public class AMapViewWrapper implements IMogoMapView, bean.setLat(lat); // 使用外部定位数据修改自车位置 mMapView.getLocationClient().updateRTKAutoPilotLocation(bean); + CallerLocationUpdaterManager.INSTANCE.updateLocation(bean); } } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java index 91bb83acdb..90059ded7e 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java @@ -11,6 +11,7 @@ import com.mogo.map.location.MogoLocationListenerRegister; import com.mogo.utils.logger.Logger; import com.zhidaoauto.map.sdk.open.location.LocationClient; import com.zhidaoauto.map.sdk.open.location.LocationListener; +import com.zhidaoauto.map.sdk.open.location.RTKAutopilotLocationBean; import org.jetbrains.annotations.NotNull; @@ -135,4 +136,29 @@ public class ALocationClient implements IMogoLocationClient { private void destroyWarming() { Logger.w( TAG, "location client has destroyed." ); } + + @Override + public void updateLocation(Object locationToUpdate) { + if (locationToUpdate == null) { + return; + } + if (locationToUpdate instanceof MogoLocation) { + return; + } + if (locationToUpdate instanceof RTKAutopilotLocationBean) { + MogoLocation last = getLastKnowLocation(); + RTKAutopilotLocationBean current = (RTKAutopilotLocationBean) locationToUpdate; + boolean isNeedUpdate = (last == null || last.getLatitude() != current.getLat() || last.getLongitude() != current.getLon()); + if (!isNeedUpdate) { + return; + } + if (last != null) { + last.setLatitude(current.getLat()); + last.setLongitude(current.getLon()); + } + if (mClient != null) { + mClient.updateRTKAutoPilotLocation(current); + } + } + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java index b17912e41d..61310341a2 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java @@ -35,4 +35,10 @@ public interface IMogoLocationClient extends IMogoLocationListenerRegister { MogoLocation getLastKnowLocation(); void destroy(); + + /** + * 更正最新的位置 + * @param locationToUpdate + */ + void updateLocation(Object locationToUpdate); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java index 520b5ce157..cf1a304533 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java @@ -78,4 +78,11 @@ public class MogoLocationClient implements IMogoLocationClient { mDelegate.destroy(); } } + + @Override + public void updateLocation(Object locationToUpdate) { + if (mDelegate != null) { + mDelegate.updateLocation(locationToUpdate); + } + } }