From 989f59678dbca9ce6f42f79c1913dc5d04ff9df8 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 16 Mar 2022 17:50:57 +0800 Subject: [PATCH] =?UTF-8?q?[Update]Map=E6=8C=89=E7=85=A7=E6=96=B0=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/och/bus/OchBusProvider.java | 6 +- .../bus/fragment/BaseOchBusTabFragment.java | 16 +- .../mogo/och/bus/fragment/OchBusFragment.java | 11 +- .../mogo/och/taxi/passenger/MogoOCHTaxi.java | 6 +- .../taxi/passenger/OCHTaxiOverlayManager.java | 3 +- .../passenger/model/TaxiPassengerModel.java | 2 - .../TaxiPassengerServingOrderPresenter.java | 10 +- .../ui/TaxiPassengerBaseFragment.java | 19 +- .../java/com/mogo/och/taxi/MogoOCHTaxi.java | 6 +- .../mogo/och/taxi/OCHTaxiOverlayManager.java | 3 +- .../och/taxi/ui/BaseOchTaxiTabFragment.java | 16 +- .../ui/OCHTaxiBeingServerdOrdersFragment.java | 5 +- app_ipc_monitoring/.gitignore | 1 - app_ipc_monitoring/proguard-rules.pro | 21 - .../autopilot/adapter/MoGoAdasListenerImpl.kt | 3 +- .../function/chat/facade/MoGoChatFacade.kt | 7 +- .../function/chat/facade/bridge/BridgeApi.kt | 2 - .../chat/facade/net/ChatServiceModel.kt | 6 +- .../hmi/ui/setting/DebugSettingView.kt | 3 +- .../hmi/ui/widget/PerspectiveSwitchView.kt | 17 +- .../function/hmi/ui/widget/SpeedPanelView.kt | 20 +- .../mogo-core-function-main/build.gradle | 4 +- .../core/function/main/MainActivity.java | 36 +- .../function/main/MainMoGoApplication.java | 23 +- .../main/delaycheck/DelayCheckUtil.java | 9 +- .../main/service/MogoMainService.java | 5 +- .../mogo-core-function-map/build.gradle | 2 + .../core/function/impl}/MogoMapService.java | 4 +- .../impl/map/MoGoLocationUpdater4AutoPilot.kt | 34 - .../impl}/marker/MogoMarkerServiceImpl.java | 17 +- .../eagle/core/function/map/MapFragment.java | 9 +- .../core/function/map/MapFrameController.java | 2 +- .../function/live/CameraLiveNoticeHelper.java | 5 +- .../function/monitoring/CronTaskManager.kt | 5 +- .../notice/repository/PushRepository.kt | 3 +- .../obu/mogo/MogoPrivateObuManager.kt | 7 +- .../function/v2x/events/V2XEventManager.kt | 3 +- .../function/v2x/events/bridge/BridgeApi.kt | 13 - .../impl/MoGoPersonWarnPolylineManager.java | 3 +- .../manager/impl/MoGoStopPolylineManager.java | 3 +- .../manager/impl/MoGoV2XMarkerManager.java | 11 +- .../manager/impl/MoGoV2XPolylineManager.java | 3 +- .../manager/impl/MoGoWarnPolylineManager.java | 3 +- .../overlay/V2XOptimalRouteOverlay.java | 3 +- .../scenario/impl/V2XScenarioManager.java | 3 +- .../scene/road/V2XRoadEventMarker.java | 3 +- .../route/V2XOptimalRouteVREventMarker.java | 3 +- .../scene/warning/V2XWarningMarker.java | 10 +- .../v2x/events/utils/LocationUtils.java | 7 +- .../function/v2x/events/utils/MapUtils.kt | 5 +- .../v2x/events/view/CarZegoLiveVideoView.java | 3 +- .../events/view/V2XCrossRoadVideoView.java | 3 +- .../redlightwarning/RedLightWarningManager.kt | 10 +- .../v2x/speedlimit/SpeedLimitDataManager.java | 5 +- .../core/MogoTrafficLightManager.kt | 4 +- .../core/function/v2x/vip/VipCarManager.kt | 40 +- core/mogo-core-function-api/build.gradle | 2 + .../api}/map/IMogoMapFrameController.java | 2 +- .../function/api}/map/IMogoMapService.java | 2 +- .../IMoGoLocationUpdater4AutoPilot.kt | 13 - .../api/map/marker}/IMogoMarkerService.java | 5 +- .../call/map/CallerLocationUpdaterManager.kt | 18 - .../call/map/CallerMapUIServiceManager.kt | 39 + .../eagle/core/utilcode/util/ToastUtils.java | 4 +- libraries/mogo-map/build.gradle | 10 +- .../com/mogo/map/AMapMarkerClickHandler.java | 77 ++ .../com/mogo/map/AMapUiSettingsWrapper.java | 110 ++ .../java/com/mogo/map/AMapViewWrapper.java | 1057 +++++++++++++++++ .../main/java/com/mogo/map/AMapWrapper.java | 326 +++++ .../com/mogo/map/CustomMapApiBuilder.java | 90 ++ .../main/java/com/mogo/map/Interrupter.java | 16 + .../java/com/mogo/map/MapCenterPoint.java | 19 + .../java/com/mogo/map/MapStyleController.java | 187 +++ .../java/com/mogo/map/RoadCacheWrapper.java | 87 ++ .../src/main/java/com/mogo/map/Scene.java | 55 + .../mogo/map/location/ALocationClient.java | 150 +++ .../map/marker/AMapInfoWindowAdapter.java | 44 + .../mogo/map/marker/AMapMarkerWrapper.java | 595 ++++++++++ .../map/marker/MarkerWrapperClickHelper.java | 41 + .../mogo/map/overlay/AMapPolylineWrapper.java | 195 +++ .../mogo/map/search/GeocodeSearchClient.java | 109 ++ .../com/mogo/map/search/InputtipsSearch.java | 87 ++ .../com/mogo/map/search/PoiSearchClient.java | 142 +++ .../map/uicontroller/AMapUIController.java | 386 ++++++ .../java/com/mogo/map/utils/MogoMapUtils.java | 135 +++ .../java/com/mogo/map/utils/ObjectUtils.java | 707 +++++++++++ .../mogo/map/utils/PointInterpolatorUtil.java | 138 +++ .../java/com/mogo/map/utils/ResIdCache.java | 23 + .../src/main/res/drawable/marker_blue.png | Bin 0 -> 1972 bytes .../SnapshotLocationDataCenter.java | 33 +- .../drawer/AdasRecognizedResultDrawer.java | 348 ++++++ .../common/drawer/IdentifyDataDrawer.java | 13 +- .../module/common/drawer/MarkerDrawer.java | 5 +- .../common/drawer/RoadConditionDrawer.java | 3 +- .../common/drawer/SnapshotSetDataDrawer.java | 3 +- .../common/drawer/TrafficMarkerDrawer.kt | 7 +- .../common/drawer/V2XWarnDataDrawer.java | 8 +- .../module/service/MarkerServiceHandler.java | 61 +- .../com/mogo/module/service/MogoServices.java | 80 +- .../module/service/StatusChangedAdapter.java | 10 +- .../handler/RefreshWorkThreadHandler.java | 5 +- .../service/intent/MockIntentHandler.java | 52 +- .../service/intent/MyLocationHandler.java | 5 +- .../intent/NetworkChangedIntentHandler.java | 7 +- .../launchercard/LauncherCardRefresher.java | 8 +- .../service/marker/MapMarkerManager.java | 14 +- .../routeoverlay/RouteOverlayDrawer.java | 10 +- .../com/mogo/service/IMogoServiceApis.java | 25 - .../mogo/service/impl/MogoServiceApis.java | 18 - .../impl/singleton/SingletonsHolder.java | 3 - settings.gradle | 1 - 111 files changed, 5552 insertions(+), 524 deletions(-) delete mode 100644 app_ipc_monitoring/.gitignore delete mode 100644 app_ipc_monitoring/proguard-rules.pro rename {services/mogo-service/src/main/java/com/mogo/service/impl/map => core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl}/MogoMapService.java (96%) delete mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/map/MoGoLocationUpdater4AutoPilot.kt rename {modules/mogo-module-service/src/main/java/com/mogo/module/service => core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl}/marker/MogoMarkerServiceImpl.java (62%) rename {services/mogo-service-api/src/main/java/com/mogo/service => core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api}/map/IMogoMapFrameController.java (91%) rename {services/mogo-service-api/src/main/java/com/mogo/service => core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api}/map/IMogoMapService.java (97%) delete mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/location/IMoGoLocationUpdater4AutoPilot.kt rename {services/mogo-service-api/src/main/java/com/mogo/service/module => core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker}/IMogoMarkerService.java (73%) delete mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerLocationUpdaterManager.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/AMapMarkerClickHandler.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/AMapUiSettingsWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/CustomMapApiBuilder.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/Interrupter.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/MapCenterPoint.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/MapStyleController.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/RoadCacheWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/Scene.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/location/ALocationClient.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapInfoWindowAdapter.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapMarkerWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/marker/MarkerWrapperClickHelper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/overlay/AMapPolylineWrapper.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/search/GeocodeSearchClient.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/search/InputtipsSearch.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/search/PoiSearchClient.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/MogoMapUtils.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/PointInterpolatorUtil.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/ResIdCache.java create mode 100644 libraries/mogo-map/src/main/res/drawable/marker_blue.png create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java index 9bb8ef491e..f36d0a0d07 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java @@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentActivity; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.bus.constant.OchBusConst; import com.mogo.och.bus.fragment.OchBusFragment; @@ -36,10 +37,7 @@ public class OchBusProvider implements IMogoOCH { */ private void stepIntoVrMode(){ Logger.d( TAG, "进入vr模式" ); - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() + MogoMapUIController.getInstance() .openVrMode(false); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java index 60d9fa8eca..6973d4f7f7 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java @@ -30,6 +30,8 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.module.common.MogoApisHandler; @@ -119,15 +121,13 @@ public abstract class BaseOchBusTabFragment(); mContext = context; - mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext); + mogoOverlayManager = MogoOverlayManager.getInstance(); } /** diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index 0b66e8f22c..9a1c435b68 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.Intent; import android.location.Location; import android.net.ConnectivityManager; -import android.text.TextUtils; import androidx.annotation.Nullable; @@ -14,7 +13,6 @@ import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.autopilot.ADASTrajectoryInfo; import com.mogo.eagle.core.data.autopilot.AutopilotGuardianStatusInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo; import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java index 70cbfff0d6..418956526e 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java @@ -82,7 +82,7 @@ public class TaxiPassengerServingOrderPresenter extends Presenter(); mContext = context; - mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext); + mogoOverlayManager = MogoOverlayManager.getInstance(); } /** diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseOchTaxiTabFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseOchTaxiTabFragment.java index 0d8bab297d..f698d2fe36 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseOchTaxiTabFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseOchTaxiTabFragment.java @@ -36,6 +36,8 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerSmpManager; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.module.common.MogoApisHandler; @@ -115,14 +117,12 @@ public abstract class BaseOchTaxiTabFragment mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor) - } + mSpeedLimmit = MogoMapUIController.getInstance() + .getSpeedLimmit(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing) + UiThreadHandler.post { + val speed = (mLatLng!!.speed * 3.6f).toInt() + mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6")) + mSpeedChartView.setValues(speed) + setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor) } } } diff --git a/core/function-impl/mogo-core-function-main/build.gradle b/core/function-impl/mogo-core-function-main/build.gradle index 5a732f53a5..ece45dd1c2 100644 --- a/core/function-impl/mogo-core-function-main/build.gradle +++ b/core/function-impl/mogo-core-function-main/build.gradle @@ -70,7 +70,7 @@ dependencies { api rootProject.ext.dependencies.mogoserviceapi api rootProject.ext.dependencies.moduleservice api rootProject.ext.dependencies.mogoservice - api rootProject.ext.dependencies.mapcustom + api rootProject.ext.dependencies.mogomap api rootProject.ext.dependencies.crashreportupgrade // api rootProject.ext.dependencies.crashreportbugly @@ -96,7 +96,7 @@ dependencies { api project(':services:mogo-service') api project(':modules:mogo-module-service') - api project(':libraries:map-custom') + api project(':libraries:mogo-map') api project(':test:crashreport-upgrade') // api project(':test:crashreport-bugly') api project(':test:crashreport-apmbyte') diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java index b410b7d63f..61c366b1d9 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java @@ -25,6 +25,7 @@ import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.data.constants.MoGoFragmentPaths; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.main.cards.MogoModulesManager; import com.mogo.eagle.core.function.main.service.MogoMainService; import com.mogo.eagle.core.function.main.utils.DisplayEffectsHelper; @@ -34,9 +35,11 @@ import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils; import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ProcessUtils; +import com.mogo.map.listener.IMogoHosListenerRegister; import com.mogo.map.listener.MogoMapListenerHandler; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoApisHandler; import com.mogo.service.IMogoServiceApis; import com.mogo.service.adas.IMogoADASControlStatusChangedListener; @@ -104,14 +107,14 @@ public class MainActivity extends MvpActivity implement // if (CallChatApi.getInstance().getApiProvider() != null) { // CallChatApi.getInstance().getApiProvider().initVehicleTeamContainer("init", R.id.module_main_id_message_history_fragment_container, this); // } - //申请悬浮窗权限 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - // 检查是否有悬浮窗权限 - if (Settings.canDrawOverlays(this)) { - return; - } - PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG); - } +// //申请悬浮窗权限 +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// // 检查是否有悬浮窗权限 +// if (Settings.canDrawOverlays(this)) { +// return; +// } +// PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG); +// } } // 隐藏布局 @@ -189,9 +192,10 @@ public class MainActivity extends MvpActivity implement MogoModulesManager.getInstance().init(this); - if (mServiceApis.getMapServiceApi() != null) { - mServiceApis.getMapServiceApi().getHostListenerRegister().registerHostMapListener(EventDispatchCenter.getInstance()); - mServiceApis.getMapServiceApi().getHostListenerRegister().registerMarkerClickListener(EventDispatchCenter.getInstance()); + IMogoHosListenerRegister listenerRegister = CallerMapUIServiceManager.INSTANCE.getHostListenerRegister(); + if (listenerRegister != null) { + listenerRegister.registerHostMapListener(EventDispatchCenter.getInstance()); + listenerRegister.registerMarkerClickListener(EventDispatchCenter.getInstance()); } initAdasControlStatusListener(); @@ -376,8 +380,11 @@ public class MainActivity extends MvpActivity implement @Override protected void onDestroy() { super.onDestroy(); - mServiceApis.getMapServiceApi().getHostListenerRegister().unregisterMarkerClickListener(); - mServiceApis.getMapServiceApi().getHostListenerRegister().unregisterHostMapListener(); + IMogoHosListenerRegister listenerRegister = CallerMapUIServiceManager.INSTANCE.getHostListenerRegister(); + if (listenerRegister != null) { + listenerRegister.unregisterMarkerClickListener(); + listenerRegister.unregisterHostMapListener(); + } mServiceApis.getRegisterCenterApi().unregisterADASControlStatusChangedListener(TAG); mMogoStatusManager.setMainPageLaunchedStatus(TAG, false); mMogoStatusManager.setMainPageIsBackgroundStatus(TAG, false); @@ -386,7 +393,8 @@ public class MainActivity extends MvpActivity implement mMogoFragmentManager.destroy(); mMogoFragmentManager = null; } - mServiceApis.getMapServiceApi().getMapUIController().destroy(); + IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController(); + if (mapUIController != null) mapUIController.destroy(); AdasConfigApiController.getInstance().release(); mServiceApis.getAdasControllerApi().release(); CallerLogger.INSTANCE.d(M_MAIN + TAG, "destroy."); diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index af127c1e6b..639013b61c 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -21,13 +21,15 @@ import com.mogo.eagle.core.data.constants.MoGoConfig; import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.chat.biz.ChatConsts; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.notice.PushUIConstants; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.ProcessUtils; import com.mogo.map.MapApiPath; +import com.mogo.map.location.IMogoLocationClient; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; @@ -186,11 +188,11 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { // clientConfig.setUseOriginSocket(true); clientConfig.setIHttpDnsCurrentLocation(() -> { - MogoLocation mogoLocation = - MogoApisHandler.getInstance() - .getApis().getMapServiceApi() - .getSingletonLocationClient(getApp()) - .getLastKnowLocation(); + MogoLocation mogoLocation = null; + IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getApp()); + if (locationClient != null) { + mogoLocation = locationClient.getLastKnowLocation(); + } HttpDnsSimpleLocation httpDnsSimpleLocation; if (mogoLocation != null && mogoLocation.getLatitude() != 0 @@ -257,9 +259,12 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE) { IMogoServiceApis apis = MogoApisHandler.getInstance().getApis(); apis.getLocationInfoApi().start(); - apis.getMapServiceApi().getSingletonLocationClient(getApplicationContext()).addLocationListener(location -> { - apis.getLocationInfoApi().provideLocation(location); - }); + IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getApplicationContext()); + if (locationClient != null) { + locationClient.addLocationListener(location -> { + apis.getLocationInfoApi().provideLocation(location); + }); + } } } diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/delaycheck/DelayCheckUtil.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/delaycheck/DelayCheckUtil.java index ab6834db00..267df7b8f6 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/delaycheck/DelayCheckUtil.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/delaycheck/DelayCheckUtil.java @@ -6,12 +6,15 @@ import android.os.Message; import android.os.SystemClock; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.BaseData; import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.network.RequestOptions; import com.mogo.eagle.core.network.SubscribeImpl; import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.map.location.IMogoLocationClient; import com.mogo.module.common.MogoApisHandler; import io.reactivex.schedulers.Schedulers; @@ -103,7 +106,11 @@ public class DelayCheckUtil implements Handler.Callback { } private void startUpload() { - MogoLocation lastLocation = MogoApisHandler.getInstance().getApis().getMapServiceApi().getSingletonLocationClient(context).getLastKnowLocation(); + IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(AbsMogoApplication.getApp()); + MogoLocation lastLocation = null; + if (locationClient != null) { + lastLocation = locationClient.getLastKnowLocation(); + } if (lastLocation == null) { handler.sendEmptyMessageDelayed(MSG_START_DELAY_CHECK, DELAY_CHECK_DELAY); return; diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/service/MogoMainService.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/service/MogoMainService.java index d80ef1a1bc..af38fd178b 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/service/MogoMainService.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/service/MogoMainService.java @@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.main.EventDispatchCenter; import com.mogo.eagle.core.function.main.cards.MogoModulesManager; import com.mogo.eagle.core.function.main.delaycheck.DelayCheckUtil; import com.mogo.eagle.core.function.main.monitoring.VehicleMonitoring; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.location.IMogoLocationListener; @@ -76,8 +77,8 @@ class MogoMainService extends Service implements IMogoLocationListener { private void initAndStartLocation() { CallerLogger.INSTANCE.d(M_MAIN + TAG, "开始定位"); - if (mServiceApis != null) { - mLocationClient = mServiceApis.getMapServiceApi().getSingletonLocationClient(AbsMogoApplication.getApp()); + mLocationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(AbsMogoApplication.getApp()); + if (mLocationClient != null) { mLocationClient.addLocationListener(this); mLocationClient.start(2_000L); } diff --git a/core/function-impl/mogo-core-function-map/build.gradle b/core/function-impl/mogo-core-function-map/build.gradle index dc7953c680..bdc0e70839 100644 --- a/core/function-impl/mogo-core-function-map/build.gradle +++ b/core/function-impl/mogo-core-function-map/build.gradle @@ -68,6 +68,7 @@ dependencies { implementation rootProject.ext.dependencies.mogomap implementation rootProject.ext.dependencies.mogomapapi + implementation rootProject.ext.dependencies.moduleservice } else { implementation project(':modules:mogo-module-common') implementation project(':services:mogo-service-api') @@ -81,6 +82,7 @@ dependencies { implementation project(":libraries:mogo-map") implementation project(":libraries:mogo-map-api") implementation project(':libraries:mogo-adas') + implementation project(':modules:mogo-module-service') } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/MogoMapService.java similarity index 96% rename from services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java rename to core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/MogoMapService.java index 70f5860947..fe220da3be 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/MogoMapService.java @@ -1,9 +1,10 @@ -package com.mogo.service.impl.map; +package com.mogo.eagle.core.function.impl; 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.IMogoMapService; import com.mogo.map.MogoGeoSearch; import com.mogo.map.MogoLocationClient; import com.mogo.map.MogoMap; @@ -22,7 +23,6 @@ import com.mogo.map.search.poisearch.IMogoPoiSearch; import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; import com.mogo.map.search.traffic.IMogoTrafficSearch; import com.mogo.map.uicontroller.IMogoMapUIController; -import com.mogo.service.map.IMogoMapService; /** * @author congtaowang 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 deleted file mode 100644 index 6f0ddd336d..0000000000 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/map/MoGoLocationUpdater4AutoPilot.kt +++ /dev/null @@ -1,34 +0,0 @@ -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/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/MogoMarkerServiceImpl.java similarity index 62% rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java rename to core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/MogoMarkerServiceImpl.java index e06270ba39..baccec9c2c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/MogoMarkerServiceImpl.java @@ -1,16 +1,18 @@ -package com.mogo.module.service.marker; +package com.mogo.eagle.core.function.impl.marker; import android.content.Context; import androidx.annotation.Nullable; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.data.constants.MogoServicePaths; +import com.mogo.eagle.core.function.api.map.marker.IMogoMarkerService; +import com.mogo.map.MogoMapUIController; import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.drawer.MarkerDrawer; import com.mogo.module.common.entity.MarkerShowEntity; -import com.mogo.module.service.MarkerServiceHandler; -import com.mogo.eagle.core.data.constants.MogoServicePaths; -import com.mogo.service.module.IMogoMarkerService; +import com.mogo.module.service.marker.MapMarkerManager; /** * @author congtaowang @@ -27,7 +29,7 @@ public class MogoMarkerServiceImpl implements IMogoMarkerService { @Override public IMogoMarker drawMarker( Object object ) { if ( object instanceof MarkerShowEntity ) { - return MarkerServiceHandler.getMapMarkerManager().drawMapMarker( ( ( MarkerShowEntity ) object ), MarkerDrawer.MARKER_Z_INDEX_HIGH ); + return MapMarkerManager.getInstance().drawMapMarker( ( ( MarkerShowEntity ) object ), MarkerDrawer.MARKER_Z_INDEX_HIGH ); } return null; } @@ -36,4 +38,9 @@ public class MogoMarkerServiceImpl implements IMogoMarkerService { public void init( Context context ) { } + + @Override + public IMogoMapUIController getMapUIController() { + return MogoMapUIController.getInstance(); + } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java index e92b3ff768..5b3fba0e35 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java @@ -9,14 +9,17 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.data.constants.MoGoFragmentPaths; +import com.mogo.eagle.core.data.constants.MogoServicePaths; +import com.mogo.eagle.core.function.api.map.IMogoMapFrameController; import com.mogo.eagle.core.function.api.map.hd.IMoGoMapFragmentProvider; +import com.mogo.eagle.core.function.call.base.CallerBase; import com.mogo.map.IMogoMap; import com.mogo.map.IMogoUiSettings; import com.mogo.map.MogoMapView; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoApisHandler; -import com.mogo.service.map.IMogoMapFrameController; +import com.mogo.service.IMogoServiceApis; /** * @author donghongyu @@ -48,7 +51,7 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > @Override protected void initViews() { - MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().initDelegate( this ); + CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).initDelegate(this); } @Override @@ -173,7 +176,7 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > @Override public void destroy() { - MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().destroy(); + CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).destroy(); } @Override diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFrameController.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFrameController.java index 9218ddbf0c..faddfe847f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFrameController.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFrameController.java @@ -4,7 +4,7 @@ import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.eagle.core.data.constants.MogoServicePaths; -import com.mogo.service.map.IMogoMapFrameController; +import com.mogo.eagle.core.function.api.map.IMogoMapFrameController; public /** diff --git a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/live/CameraLiveNoticeHelper.java b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/live/CameraLiveNoticeHelper.java index fe3aff9eeb..d7bc443291 100644 --- a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/live/CameraLiveNoticeHelper.java +++ b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/live/CameraLiveNoticeHelper.java @@ -9,6 +9,7 @@ import android.text.TextUtils; import com.mogo.cloud.socket.entity.SocketDownData; import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.function.monitoring.R; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; @@ -77,7 +78,7 @@ public class CameraLiveNoticeHelper implements IMogoCloudOnMsgListener { Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_space, null); options.icon(bitmap); - mMogoMarker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext) + mMogoMarker = CallerMapUIServiceManager.INSTANCE.getMarkerManager(mContext) .addMarker(PushDataType.TYPE_PUSH_CAMERA_DATA, options); if (mMogoMarker != null) { mMogoMarker.setInfoWindowAdapter(new CameraWindow3DAdapter(AbsMogoApplication.getApp(), options)); @@ -107,7 +108,7 @@ public class CameraLiveNoticeHelper implements IMogoCloudOnMsgListener { Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.module_camera_normal_traffic, null); options.icon(bitmap); - mMogoMarker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext) + mMogoMarker = CallerMapUIServiceManager.INSTANCE.getMarkerManager(mContext) .addMarker(PushDataType.TYPE_PUSH_CAMERA_DATA, options); if (mMogoMarker != null) { mMogoMarker.setOwner(PushDataType.TYPE_PUSH_CAMERA_DATA); diff --git a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt index 9655114b70..716ed288db 100644 --- a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt +++ b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt @@ -10,6 +10,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.function.monitoring.net.CameraListServices +import com.mogo.map.MogoLocationClient import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.constants.HostConst import io.reactivex.android.schedulers.AndroidSchedulers @@ -86,7 +87,7 @@ class CronTaskManager(private var context: Context?) { * 请求路口一定范围内的设备信息(包含:摄像头、灯) */ private fun requestDeviceList() { - MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(context).lastKnowLocation?.let { location -> + MogoLocationClient.getInstance(context).lastKnowLocation?.let { location -> disposable = netWork.create(CameraListServices::class.java, HostConst.CITY_HOST) .getDeviceList(location.longitude, location.latitude, 500) .subscribeOn(Schedulers.io()) @@ -119,7 +120,7 @@ class CronTaskManager(private var context: Context?) { } private fun requestCarCameraList() { - MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(context).lastKnowLocation?.let { location -> + MogoLocationClient.getInstance(context).lastKnowLocation?.let { location -> carDisposable = netWork.create(CameraListServices::class.java, HostConst.CITY_HOST) .getCarCameraList(ReqLiveCarBean(location.longitude, location.latitude)) diff --git a/core/function-impl/mogo-core-function-notice/src/main/java/com/mogo/eagle/core/function/notice/repository/PushRepository.kt b/core/function-impl/mogo-core-function-notice/src/main/java/com/mogo/eagle/core/function/notice/repository/PushRepository.kt index 3c2a0a5fd4..d6f4422c8a 100644 --- a/core/function-impl/mogo-core-function-notice/src/main/java/com/mogo/eagle/core/function/notice/repository/PushRepository.kt +++ b/core/function-impl/mogo-core-function-notice/src/main/java/com/mogo/eagle/core/function/notice/repository/PushRepository.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.notice.model.PushBean import com.mogo.eagle.core.function.notice.utils.HandlerUtils import com.mogo.eagle.core.function.notice.view.getApis import com.mogo.eagle.core.function.notice.viewmodel.PushViewModel +import com.mogo.map.MogoLocationClient import com.mogo.service.statusmanager.IMogoStatusChangedListener import com.mogo.service.statusmanager.StatusDescriptor import java.util.* @@ -48,7 +49,7 @@ class PushRepository(mContext: Context) { .pushBeanDao() } private val locationClient = - getApis(mContext).mapServiceApi.getSingletonLocationClient(appContext) + MogoLocationClient.getInstance(appContext) private val mHandler = Handler(Looper.getMainLooper()) diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt index 0094b65af8..fa8346c6cc 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt @@ -12,11 +12,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtils import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.map.MogoMapUIController import com.mogo.module.common.datacenter.SnapshotLocationDataCenter import com.mogo.module.common.drawer.TrafficMarkerDrawer import com.mogo.module.common.enums.EventTypeEnum import com.mogo.service.IMogoServiceApis -import com.mogo.service.map.IMogoMapService import com.zhidao.support.obu.MogoObuManager import com.zhidao.support.obu.OnMogoObuListener import com.zhidao.support.obu.constants.ObuConstants @@ -38,7 +38,6 @@ class MogoPrivateObuManager private constructor() { } private var mMogoServiceApis: IMogoServiceApis? = null - private var mIMogoMapService: IMogoMapService? = null private var mContext: Context? = null private var mObuStatusInfo = CallerObuListenerManager.getObuStatusInfo() @@ -47,8 +46,6 @@ class MogoPrivateObuManager private constructor() { mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS) .navigation(context) as IMogoServiceApis mContext = context - mIMogoMapService = mMogoServiceApis!!.mapServiceApi - connectObu(context, ipAddress) MogoObuManager.getInstance().registerListener(mogoObuListener) } @@ -179,7 +176,7 @@ class MogoPrivateObuManager private constructor() { // 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU if (2 == FunctionBuildConfig.gpsProvider) { - mIMogoMapService?.mapUIController?.syncLocation2Map(data) + MogoMapUIController.getInstance().syncLocation2Map(data) SnapshotLocationDataCenter.getInstance().syncAdasLocationInfo(data) } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt index ef208ac848..ee1b7f442c 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt @@ -21,6 +21,7 @@ import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.v2x.events.alarm.V2XAlarmServer import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi.context @@ -341,7 +342,7 @@ object V2XEventManager : IMoGoMapLocationListener, IMoGoTokenCallback, IV2XCallb v2xPolyline.points = pointsOdl //CallerLogger.d("$M_V2X$TAG", "当前地图的缩放比例为:" + zoomLevel); - val zoomLevel: Float = BridgeApi.mapUiController()?.zoomLevel ?: 0.0f + val zoomLevel: Float = CallerMapUIServiceManager.getMapUIController()?.zoomLevel ?: 0.0f //CallerLogger.d("$M_V2X$TAG", "当前地图的缩放比例为:" + zoomLevel); if (zoomLevel > 0 && zoomLevel <= 17 && BridgeApi.v2xStatus()?.isRoadEventWindowShow == false) { // 缩放地图 val context: Context = context() diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/bridge/BridgeApi.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/bridge/BridgeApi.kt index 66adce5b28..d61979e468 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/bridge/BridgeApi.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/bridge/BridgeApi.kt @@ -7,7 +7,6 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths import com.mogo.eagle.core.function.v2x.events.manager.* import com.mogo.eagle.core.function.v2x.events.network.V2XRefreshModel import com.mogo.eagle.core.utilcode.util.Utils -import com.mogo.map.uicontroller.IMogoMapUIController import com.mogo.module.common.MogoApisHandler import com.mogo.service.statusmanager.IMogoStatusManager import java.lang.ref.WeakReference @@ -61,18 +60,10 @@ internal object BridgeApi { fun context(): Context = this.context.get()?.get() ?: Utils.getApp() - fun mapUiController(): IMogoMapUIController? = apis?.mapServiceApi?.mapUIController - - fun map() = apis?.mapServiceApi - fun statusManager(): IMogoStatusManager? = apis?.statusManagerApi fun analytics() = apis?.analyticsApi - fun overlay() = apis?.mapServiceApi?.getOverlayManager(context()) - - fun marker() = apis?.mapServiceApi?.getMarkerManager(context()) - fun v2xMarker() = v2xMarker fun v2xPolyline() = v2xPolyline @@ -98,8 +89,4 @@ internal object BridgeApi { fun intentManager() = apis?.intentManagerApi fun actionManager() = apis?.actionManagerApi - - fun locationClient() = apis?.mapServiceApi?.getSingletonLocationClient(context()) - - fun markerService() = apis?.markerService } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoPersonWarnPolylineManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoPersonWarnPolylineManager.java index a3777a8b5a..74bd1d5fa7 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoPersonWarnPolylineManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoPersonWarnPolylineManager.java @@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths; import com.mogo.eagle.core.function.v2x.events.consts.V2XConst; import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoPersonWarnPolylineManager; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.MogoPolylineOptions; @@ -54,7 +55,7 @@ public class MoGoPersonWarnPolylineManager implements IMoGoPersonWarnPolylineMan options.add(locations.get(i)); } // 绘制线的对象 - IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay(); + IMogoOverlayManager overlay = MogoOverlayManager.getInstance(); if (overlay != null) { mMogoPolyline = overlay.addPolyline(options); mMogoPolyline.setTransparency(0.5f); diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoStopPolylineManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoStopPolylineManager.java index 24eab422f9..645b3bba52 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoStopPolylineManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoStopPolylineManager.java @@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths; import com.mogo.eagle.core.function.v2x.events.consts.V2XConst; import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoStopPolylineManager; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.MogoPolylineOptions; @@ -53,7 +54,7 @@ public class MoGoStopPolylineManager implements IMoGoStopPolylineManager { options.add(locations.get(i)); } // 绘制线的对象 - IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay(); + IMogoOverlayManager overlay = MogoOverlayManager.getInstance(); if (overlay != null) { mMogoPolyline = overlay.addPolyline(options); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XMarkerManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XMarkerManager.java index f77a17417a..2ee97d01b6 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XMarkerManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XMarkerManager.java @@ -7,6 +7,7 @@ import android.content.Context; import android.graphics.Bitmap; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; @@ -21,6 +22,8 @@ import com.mogo.eagle.core.function.v2x.events.marker.V2XMarkerAdapter; import com.mogo.eagle.core.function.v2x.events.utils.EntityUtilsKt; import com.mogo.eagle.core.function.v2x.events.utils.MapUtils; import com.mogo.eagle.core.utilcode.util.ViewUtils; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; @@ -74,7 +77,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { } clearAlarmPOI(); // 锁车 - IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController(); + IMogoMapUIController mapUiController = MogoMapUIController.getInstance(); if (mapUiController != null) { mapUiController.recoverLockMode(); } @@ -231,7 +234,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { @Override public void drawableAlarmPOI(Context context, V2XRoadEventEntity roadEventEntity, IMogoMarkerClickListener clickListener) { try { - IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController(); + IMogoMapUIController mapUiController = MogoMapUIController.getInstance(); if (mapUiController != null) { mapUiController.changeMapMode(EnumMapUI.NorthUP_2D); } @@ -273,7 +276,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { mAlarmInfoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, clickListener); } else { optionsRipple.icon(V2XMarkerAdapter.getV2XRoadEventViewPng(context, roadEventEntity)); - IMogoMarkerManager marker = BridgeApi.INSTANCE.marker(); + IMogoMarkerManager marker = MogoMarkerManager.getInstance(context); if (marker != null) { mAlarmInfoMarker = marker.addMarker(V2X_EVENT_ALARM_POI, optionsRipple); } @@ -319,7 +322,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { @Override public void clearALLPOI() { try { - IMogoMarkerManager markerManager = BridgeApi.INSTANCE.marker(); + IMogoMarkerManager markerManager = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()); if (markerManager != null) { markerManager.removeMarkers(); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XPolylineManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XPolylineManager.java index 88e6536cb2..21badb6fae 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XPolylineManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoV2XPolylineManager.java @@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XPolylineManager; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XStatusManager; import com.mogo.eagle.core.function.v2x.events.manager.V2XStatusManager; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.MogoPolylineOptions; @@ -90,7 +91,7 @@ public class MoGoV2XPolylineManager implements IMoGoV2XPolylineManager { options.add(V2XStatusManager.getInstance().getTargetMoGoLatLng()); // 绘制线的对象 - IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay(); + IMogoOverlayManager overlay = MogoOverlayManager.getInstance(); if (overlay != null) { mMogoPolyline = overlay.addPolyline(options); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoWarnPolylineManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoWarnPolylineManager.java index 14a46f253f..d3e3cf2c1c 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoWarnPolylineManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/manager/impl/MoGoWarnPolylineManager.java @@ -11,6 +11,7 @@ import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi; import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths; import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoWarnPolylineManager; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.MogoPolylineOptions; @@ -61,7 +62,7 @@ public class MoGoWarnPolylineManager implements IMoGoWarnPolylineManager { } // 绘制线的对象 - IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay(); + IMogoOverlayManager overlay = MogoOverlayManager.getInstance(); if (overlay != null) { mMogoPolyline = overlay.addPolyline(options); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/overlay/V2XOptimalRouteOverlay.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/overlay/V2XOptimalRouteOverlay.java index 8d072eefcd..6bf879689e 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/overlay/V2XOptimalRouteOverlay.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/overlay/V2XOptimalRouteOverlay.java @@ -5,6 +5,7 @@ import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi; import com.mogo.eagle.core.function.v2x.events.utils.LocationUtils; import com.mogo.eagle.core.utilcode.util.ColorUtils; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.MogoPolylineOptions; @@ -65,7 +66,7 @@ public class V2XOptimalRouteOverlay { // 线条粗细,渐变,渐变色值 mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors); // 绘制线 - IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay(); + IMogoOverlayManager overlay = MogoOverlayManager.getInstance(); if (overlay != null) { mMoGoPolyline = overlay.addPolyline(mPolylineOptions); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/impl/V2XScenarioManager.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/impl/V2XScenarioManager.java index d25c08774a..73dbe92c0b 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/impl/V2XScenarioManager.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/impl/V2XScenarioManager.java @@ -16,6 +16,7 @@ import com.mogo.eagle.core.function.v2x.events.scenario.scene.warning.V2XFrontWa import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.Utils; +import com.mogo.map.MogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.module.common.entity.V2XMessageEntity; @@ -105,7 +106,7 @@ public class V2XScenarioManager implements IV2XScenarioManager { * 道路事件触发后,切换到中景 */ private void sceneChange() { - IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController(); + IMogoMapUIController mapUiController = MogoMapUIController.getInstance(); if (mapUiController != null && mapUiController.getCurrentMapVisualAngle() != VisualAngleMode.MODE_MEDIUM_SIGHT) { mapUiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventMarker.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventMarker.java index 8cec39cc26..9829db825e 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventMarker.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventMarker.java @@ -4,6 +4,7 @@ import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XMarkerManager; import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XPolylineManager; import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker; +import com.mogo.map.MogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.entity.V2XRoadEventEntity; @@ -31,7 +32,7 @@ public class V2XRoadEventMarker implements IV2XMarker { @Override public void clearPOI() { // 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随 - IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController(); + IMogoMapUIController mapUiController = MogoMapUIController.getInstance(); if (mapUiController != null) { mapUiController.loseLockMode(); } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/route/V2XOptimalRouteVREventMarker.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/route/V2XOptimalRouteVREventMarker.java index b945baeda5..6a830f02ea 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/route/V2XOptimalRouteVREventMarker.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/route/V2XOptimalRouteVREventMarker.java @@ -8,6 +8,7 @@ import com.mogo.eagle.core.function.v2x.events.entity.net.V2XOptimalRouteDataRes import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XMarkerManager; import com.mogo.eagle.core.function.v2x.events.observer.V2XOptimalRouteObserver; import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker; +import com.mogo.map.MogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController; /** @@ -41,7 +42,7 @@ public class V2XOptimalRouteVREventMarker implements IV2XMarker - val tileId = MogoApisHandler.getInstance().apis - .mapServiceApi.mapUIController.getTileId(it.longitude, it.latitude) + val tileId = CallerMapUIServiceManager.getMapUIController()?.getTileId(it.longitude, it.latitude) ?: 0 trafficLightNetWorkModel.requestRoadID( tileId, it.latitude, it.longitude, it.bearing.toDouble(), { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt index e143629724..373f73bad2 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt @@ -5,6 +5,7 @@ import android.location.Location import android.os.Handler import android.os.Looper import android.os.Message +import androidx.core.content.contentValuesOf import com.mogo.cloud.commons.utils.CoordinateUtils import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X import com.mogo.eagle.core.data.trafficlight.* @@ -13,6 +14,7 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager import com.mogo.eagle.core.function.call.vip.CallVipSetListenerManager import com.mogo.eagle.core.function.v2x.trafficlight.core.MogoTrafficLightManager @@ -130,16 +132,24 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe //如果上次结果和本次灯态结果变化比较大,则已变灯,控制HMI展示弹窗 if (abs(currentResult!!.remain - it.remain) > 5 && currentResult.isGreen()) { CallerLogger.d("$M_V2X$TAG", "调用showWarningV2X to show") - CallerHmiManager.showWarningV2X(EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType.toInt(), EventTypeEnum.TYPE_VIP_IDENTIFICATION.content, EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts, EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType, object : IMoGoWarningStatusListener { - override fun onShow() {} - override fun onDismiss() { - CallerLogger.d( - "$M_V2X$TAG", - "showWarningV2X vip dismiss , resetConditions" - ) - resetConditions() - } - }, true, 5000L) + CallerHmiManager.showWarningV2X( + EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType.toInt(), + EventTypeEnum.TYPE_VIP_IDENTIFICATION.content, + EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts, + EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType, + object : IMoGoWarningStatusListener { + override fun onShow() {} + override fun onDismiss() { + CallerLogger.d( + "$M_V2X$TAG", + "showWarningV2X vip dismiss , resetConditions" + ) + resetConditions() + } + }, + true, + 5000L + ) } } @@ -234,12 +244,14 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe } private fun turnLight(controlTime: Int) { - result?.let { - val bearing = - MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(mContext).lastKnowLocation.bearing.toDouble() + if (result == null || mContext == null) return + val locationClient = CallerMapUIServiceManager.getSingletonLocationClient(mContext!!) + if (locationClient != null) { + var bearing = + locationClient.lastKnowLocation.bearing.toDouble() CallerLogger.d("$M_V2X$TAG", "turnLight -- bearing : $bearing") MogoTrafficLightManager.INSTANCE.turnLightToGreen( - it.lightId, it.crossId, bearing, controlTime, + result!!.lightId, result!!.crossId, bearing, controlTime, { CallerLogger.d("$M_V2X$TAG", "变灯请求成功") }, diff --git a/core/mogo-core-function-api/build.gradle b/core/mogo-core-function-api/build.gradle index 56faa70676..d0b7e2c76b 100644 --- a/core/mogo-core-function-api/build.gradle +++ b/core/mogo-core-function-api/build.gradle @@ -51,9 +51,11 @@ dependencies { if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogo_core_data compileOnly rootProject.ext.dependencies.adasHigh + compileOnly rootProject.ext.dependencies.mogomapapi } else { implementation project(':core:mogo-core-data') compileOnly project(':libraries:mogo-adas') + compileOnly project(':libraries:mogo-map-api') } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapFrameController.java similarity index 91% rename from services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java rename to core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapFrameController.java index 696221d40a..dd8a647202 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapFrameController.java @@ -1,4 +1,4 @@ -package com.mogo.service.map; +package com.mogo.eagle.core.function.api.map; import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.map.IDestroyable; diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapService.java similarity index 97% rename from services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java rename to core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapService.java index 6de195dc40..90b86a1810 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/IMogoMapService.java @@ -1,4 +1,4 @@ -package com.mogo.service.map; +package com.mogo.eagle.core.function.api.map; import android.content.Context; 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 deleted file mode 100644 index 6e5e77deb1..0000000000 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/location/IMoGoLocationUpdater4AutoPilot.kt +++ /dev/null @@ -1,13 +0,0 @@ -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/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoMarkerService.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMogoMarkerService.java similarity index 73% rename from services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoMarkerService.java rename to core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMogoMarkerService.java index 8493cba40c..7bfe77bd25 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoMarkerService.java +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMogoMarkerService.java @@ -1,9 +1,10 @@ -package com.mogo.service.module; +package com.mogo.eagle.core.function.api.map.marker; import androidx.annotation.Nullable; import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.uicontroller.IMogoMapUIController; /** * @author congtaowang @@ -19,4 +20,6 @@ public interface IMogoMarkerService extends IProvider { */ @Nullable IMogoMarker drawMarker( Object object ); + + IMogoMapUIController getMapUIController(); } 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 deleted file mode 100644 index 2532c984c2..0000000000 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerLocationUpdaterManager.kt +++ /dev/null @@ -1,18 +0,0 @@ -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/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt new file mode 100644 index 0000000000..bab7121e86 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -0,0 +1,39 @@ +package com.mogo.eagle.core.function.call.map + +import android.content.Context +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.map.IMogoMapService +import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.map.listener.IMogoHosListenerRegister +import com.mogo.map.location.IMogoLocationClient +import com.mogo.map.marker.IMogoMarkerManager +import com.mogo.map.search.geo.IMogoGeoSearch +import com.mogo.map.uicontroller.IMogoMapUIController + +object CallerMapUIServiceManager { + private val serviceProvider : IMogoMapService? by lazy { + CallerBase.getApiInstance( + IMogoMapService::class.java, + MogoServicePaths.PATH_SERVICES_MAP) + } + + fun getMapUIController(): IMogoMapUIController? { + return serviceProvider?.mapUIController + } + + fun getHostListenerRegister(): IMogoHosListenerRegister? { + return serviceProvider?.hostListenerRegister + } + + fun getSingletonLocationClient(context: Context): IMogoLocationClient? { + return serviceProvider?.getSingletonLocationClient(context) + } + + fun getGeoSearch(context: Context): IMogoGeoSearch? { + return serviceProvider?.getGeoSearch(context) + } + + fun getMarkerManager(context: Context): IMogoMarkerManager? { + return serviceProvider?.getMarkerManager(context) + } +} \ No newline at end of file diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ToastUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ToastUtils.java index 82b3414c46..84b1791d05 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ToastUtils.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ToastUtils.java @@ -522,9 +522,9 @@ public final class ToastUtils { return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST); } else if (UtilsBridge.isGrantedDrawOverlays()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); + return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_PANEL); } else { - return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE); + return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST); } } return new ActivityToast(toastUtils); diff --git a/libraries/mogo-map/build.gradle b/libraries/mogo-map/build.gradle index bf618818ac..4003766372 100644 --- a/libraries/mogo-map/build.gradle +++ b/libraries/mogo-map/build.gradle @@ -33,6 +33,11 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } } dependencies { @@ -41,20 +46,21 @@ dependencies { implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler - + implementation rootProject.ext.dependencies.mogocustommap if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogo_core_utils implementation rootProject.ext.dependencies.mogomapapi implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.mogo_core_data - + implementation rootProject.ext.dependencies.mogo_core_function_call } else { implementation project(':core:mogo-core-utils') implementation project(':libraries:mogo-map-api') implementation project(':foudations:mogo-commons') implementation project(':core:mogo-core-data') + implementation project(':core:mogo-core-function-call') } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapMarkerClickHandler.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapMarkerClickHandler.java new file mode 100644 index 0000000000..92ef0d829c --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapMarkerClickHandler.java @@ -0,0 +1,77 @@ +package com.mogo.map; + +import static com.mogo.map.marker.MarkerType.MAP_STATIC; + +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.marker.AMapMarkerWrapper; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.IMogoMarkerClickListener; +import com.mogo.map.marker.MarkerWrapperClickHelper; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.marker.MogoMarkersHandler; +import com.zhidaoauto.map.sdk.open.marker.Marker; + +import java.util.Map; + +/** + * @author congtaowang + * @since 2019-12-24 + *

+ * marker 点击事件处理 + */ +public class AMapMarkerClickHandler { + + private static volatile AMapMarkerClickHandler sInstance; + + private AMapMarkerClickHandler() { + } + + public static AMapMarkerClickHandler getInstance() { + if (sInstance == null) { + synchronized (AMapMarkerClickHandler.class) { + if (sInstance == null) { + sInstance = new AMapMarkerClickHandler(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + public boolean handleMarkerClicked(Marker marker) { + if (marker == null) { + return false; + } + //地图道路上静态数,暂时只过滤traffic类型下发点击事件 + if (MarkerWrapperClickHelper.getInstance().isStaticMarker(marker.getId())){ + IMogoMarker iMogoMarker = new AMapMarkerWrapper(marker,new MogoMarkerOptions()); + iMogoMarker.setOwner(MAP_STATIC); //TODO 后续可能由于类型比较多,需要owner匹配机制,以及控制owner细粒度 + Logger.d("AMapMarkerWrapper", "traffic marker 点击回调"); + return MogoMarkersHandler.getInstance().onStaticMarkerClicked(iMogoMarker); + } + + Map mogoMarkerMap = MarkerWrapperClickHelper.getInstance().getMogoMarkerMap(); + if (mogoMarkerMap.containsKey(marker.getId())) { + IMogoMarker mogoMarker = mogoMarkerMap.get(marker.getId()); + final IMogoMarkerClickListener listener = mogoMarker.getOnMarkerClickListener(); + Logger.d("AMapMarkerWrapper", "marker 点击回调:%s -> %s", mogoMarker, marker); + if (listener != null) { + boolean result = listener.onMarkerClicked(mogoMarker); + if (result) { + return true; + } + } + return MogoMarkersHandler.getInstance().onMarkerClicked(mogoMarker); + } + return false; + } + +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapUiSettingsWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapUiSettingsWrapper.java new file mode 100644 index 0000000000..6865f453de --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapUiSettingsWrapper.java @@ -0,0 +1,110 @@ +package com.mogo.map; + +import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper; + +import java.lang.reflect.Method; + +/** + * @author congtaowang + * @since 2019-12-18 + *

+ * 代理自研地图UiSettings + */ +public class AMapUiSettingsWrapper implements IMogoUiSettings { + + private MapAutoViewHelper mUiSettings; + + public AMapUiSettingsWrapper( MapAutoViewHelper mUiSettings ) { + this.mUiSettings = mUiSettings; + } + + @Override + public void setScaleControlsEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + } + } + + @Override + public void setZoomControlsEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setZoomGesturesEnabled( enabled ); + } + } + + @Override + public void setCompassEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + if(enabled){ + mUiSettings.showDirection(); + }else{ + mUiSettings.hiddenDirection(); + } + } + } + + @Override + public void setMyLocationButtonEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + if(enabled){ + mUiSettings.showLocation(); + }else{ + mUiSettings.hiddenLocation(); + } + } + } + + @Override + public void setScrollGesturesEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setScrollGesturesEnabled( enabled ); + } + } + + @Override + public void setZoomGesturesEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setZoomGesturesEnabled( enabled ); + } + } + + @Override + public void setTiltGesturesEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setTiltGesturesEnabled( enabled ); + } + } + + @Override + public void setRotateGesturesEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setRotateGesturesEnabled( enabled ); + } + } + + @Override + public void setAllGesturesEnabled( boolean enabled ) { + if ( mUiSettings != null ) { + mUiSettings.setAllGesturesEnabled( enabled ); + } + } + + @Override + public void setIndoorSwitchEnabled( boolean enabled ) { + if ( mUiSettings != null ) { +// mUiSettings.setIndoorSwitchEnabled( enabled ); + } + } + + @Override + public void setLogoEnable( boolean enabled ) { + if ( mUiSettings != null ) { + try { + Method method = mUiSettings.getClass().getMethod( "setLogoEnable", boolean.class ); + method.setAccessible( true ); + method.invoke( mUiSettings, enabled ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java new file mode 100644 index 0000000000..100967c614 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -0,0 +1,1057 @@ +package com.mogo.map; + +import static com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_300; +import static com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS; +import static com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP; +import static com.mogo.map.uicontroller.VisualAngleMode.MODE_CLOSE_SIGHT; +import static com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT; +import static com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT; + +import android.content.Context; +import android.graphics.Point; +import android.graphics.Rect; +import android.location.Location; +import android.os.Bundle; +import android.os.Trace; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.mogo.commons.constants.SharedPrefsConstants; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.config.HdMapBuildConfig; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager; +import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapStyleListenerManager; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; +import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; +import com.mogo.eagle.core.utilcode.util.GsonUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.listener.MogoMapListenerHandler; +import com.mogo.map.navi.MogoCarLocationChangedListenerRegister; +import com.mogo.map.uicontroller.CarCursorOption; +import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.map.uicontroller.MapCameraPosition; +import com.mogo.map.uicontroller.MapControlResult; +import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.map.utils.MogoMapUtils; +import com.mogo.map.utils.ObjectUtils; +import com.mogo.map.utils.PointInterpolatorUtil; +import com.mogo.map.utils.ResIdCache; +import com.zhidaoauto.map.sdk.open.MapAutoApi; +import com.zhidaoauto.map.sdk.open.abs.MapStatusListener; +import com.zhidaoauto.map.sdk.open.abs.OnCameraChangeListener; +import com.zhidaoauto.map.sdk.open.abs.OnMapClickListener; +import com.zhidaoauto.map.sdk.open.abs.OnMapLoadedListener; +import com.zhidaoauto.map.sdk.open.abs.OnMapStyleListener; +import com.zhidaoauto.map.sdk.open.abs.OnMapTouchListener; +import com.zhidaoauto.map.sdk.open.abs.OnMapViewVisualAngleChangeListener; +import com.zhidaoauto.map.sdk.open.camera.CameraPosition; +import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory; +import com.zhidaoauto.map.sdk.open.camera.LatLngBounds; +import com.zhidaoauto.map.sdk.open.data.MapDataApi; +import com.zhidaoauto.map.sdk.open.data.SinglePointRoadInfo; +import com.zhidaoauto.map.sdk.open.location.LocationListener; +import com.zhidaoauto.map.sdk.open.location.MyLocationStyle; +import com.zhidaoauto.map.sdk.open.location.RTKAutopilotLocationBean; +import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory; +import com.zhidaoauto.map.sdk.open.marker.Marker; +import com.zhidaoauto.map.sdk.open.marker.OnMarkClickListener; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.tools.MapTools; +import com.zhidaoauto.map.sdk.open.view.MapAutoView; +import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.json.JSONObject; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import mogo.telematics.pad.MessagePad; + +public class AMapViewWrapper implements IMogoMapView, + IMogoMapUIController, + LocationListener, + OnMapLoadedListener, + MapStatusListener, + OnCameraChangeListener, + OnMapClickListener, + OnMapTouchListener, + OnMarkClickListener, + OnMapStyleListener, + MapStyleController.IMapStyleAutoChangedListener, OnMapViewVisualAngleChangeListener { + + private static final String TAG = "AMapViewWrapper"; + private final MapAutoView mMapView; + private final IMogoMap mIMap; + private AMapMarkerClickHandler mMarkerClickHandler; + + private final CarCursorOption DEFAULT_OPTION = new CarCursorOption.Builder() + .carCursorRes(R.drawable.map_api_ic_current_location2) + .naviCursorRes(R.drawable.ic_amap_navi_cursor) + .build(); + private CarCursorOption mCarCursorOption = DEFAULT_OPTION; + private EnumMapUI mCurrentCarUIMode; + private EnumMapUI mCurrentUI; + private VisualAngleMode mVisualAngleMode = MODE_MEDIUM_SIGHT; + + private int mLockZoom = 16; + private long startTime; + private float mDefaultZoomLevel = 16.0f; + private boolean mIsCarLocked = false; + private boolean mIsLightStyle = false; + private boolean mMapLoaded = false; + private boolean mIsFirstLocated = true; + private boolean mIsDelayed = false; + + public AMapViewWrapper(MapAutoView mMapView) { + startTime = System.currentTimeMillis(); + CallerLogger.INSTANCE.i(TAG, "autoop--AMapViewWrapper: init"); + this.mMapView = mMapView; + initViews(); + initListeners(); + this.mIMap = new AMapWrapper(this.mMapView.getMapAutoViewHelper(), this.mMapView, this); + } + + private void initViews() { + + } + + private void initMapView() { + if (mMapView == null) { + return; + } + MapAutoViewHelper options = mMapView.getMapAutoViewHelper(); + if (options != null) { + //设置手势是否可以缩放 isCanZoom true 可缩放 false 不可缩放 + options.setZoomGesturesEnabled(true); + options.setScaleVRMode(true); + if (options.getMyLocationStyle() != null) { + options.getMyLocationStyle().setDisplayAnimEnable(false); + } + //修改自车模型,未来需区分车的类型 + options.setMyLocationStyle(options.getMyLocationStyle().myLocationIcon(HdMapBuildConfig.currentCarVrIconRes, true)); +// MapAutoApi.INSTANCE.getMyLocationStyle().myLocationIcon(HdMapBuildConfig.currentCarVrIconRes, true); + } + } + + private void initListeners() { + + mMapView.setOnMarkClickListener(this); + mMarkerClickHandler = AMapMarkerClickHandler.getInstance(); + mMapView.setOnMapLoadedListener(this); + mMapView.setOnMapTouchListener(this); + mMapView.setOnMapClickListener(this); + mMapView.getLocationClient().registerListener(this); + mMapView.registerListener(this, MapAutoApi.LISTENER_TYPE_ZOOM); + mMapView.registerListener(this, MapAutoApi.LISTENER_TYPE_ROTATE); + mMapView.registerListener(this, MapAutoApi.LISTENER_TYPE_3D); + mMapView.setOnCameraChangeListener(this); + mMapView.setOnMapStyleListener(this); + mMapView.setOnMapViewVisualAngleChangeListener(this); + CallerLogger.INSTANCE.d(TAG, "styleop - initListeners - setOnMapStyleListener - view " + mMapView); + } + + private Context getContext() { + return mMapView.getContext(); + } + + @Override + public View getMapView() { + return mMapView; + } + + @Override + public IMogoMap getMap() { + return mIMap; + } + + @Override + public void onCreate(Bundle bundle) { + if (mMapView != null) { + mMapView.onCreate(bundle); + CallerLogger.INSTANCE.d(TAG, "map onCreate"); + } + } + + @Override + public void onResume() { + if (mMapView != null) { + mMapView.onResume(); + CallerLogger.INSTANCE.d(TAG, "map onResume"); + } + } + + @Override + public void onPause() { + if (mMapView != null) { + mMapView.onPause(); + CallerLogger.INSTANCE.d(TAG, "map onPause"); + } + } + + @Override + public void onDestroy() { + if (mMapView != null) { + mMapView.onDestroy(); + mMapView.setOnMarkClickListener(null); + mMapView.setOnMapLoadedListener(null); + mMapView.setOnMapTouchListener(null); + mMapView.setOnMapClickListener(null); + mMapView.getLocationClient().unRegisterListener(this); + mMapView.setOnCameraChangeListener(null); + CallerLogger.INSTANCE.d(TAG, "map onDestroy"); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + if (mMapView != null) { + mMapView.onSaveInstanceState(outState); + CallerLogger.INSTANCE.d(TAG, "map onSaveInstanceState"); + } + } + + @Override + public void onLowMemory() { + + } + + @Override + public void setTrafficEnabled(boolean visible) { + if (checkAMapView()) { + // mMapView.getMapAutoViewHelper().setTraffic( visible ); + } + } + + @Override + public MapControlResult changeZoom(boolean zoom) { + if (checkAMapView()) { + mDefaultZoomLevel = (getMap().getZoomLevel() + 0.5f); + if (zoom) { + if (mDefaultZoomLevel >= 20f) { + return MapControlResult.TARGET; + } + } else { + if (mDefaultZoomLevel <= 7f) { + return MapControlResult.TARGET; + } + } + + if (zoom) { + mDefaultZoomLevel += 1f; + if (mDefaultZoomLevel > 19f) { + mDefaultZoomLevel = 19f; + } + } else { + mDefaultZoomLevel -= 1f; + if (mDefaultZoomLevel < 8f) { + mDefaultZoomLevel = 8f; + } + } + changeZoom(mDefaultZoomLevel); + } + return MapControlResult.SUCCESS; + } + + @Override + public MapControlResult changeZoom(float zoom) { + if (mCurrentUI == EnumMapUI.Type_VR) { + return MapControlResult.ERROR; + } + CallerLogger.INSTANCE.d(TAG, "changeZoom : " + zoom); + if (DebugConfig.isDebug()) { + CallerLogger.INSTANCE.d(TAG, Log.getStackTraceString(new Throwable())); + } + getMap().changeZoom(zoom); + return MapControlResult.SUCCESS; + } + + @Override + public void changeMapMode(EnumMapUI ui) { + if (ui == null) { + return; + } + + CallerLogger.INSTANCE.d(TAG, "设置的样式 :" + ui); + if (checkAMapView()) { + mMapView.getMapAutoViewHelper().setScaleVRMode(true); + mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_VR); + // TODO 这里临时修改关闭2D +// switch (ui) { +// case CarUp_2D: +// case CarUp_3D: +// case NorthUP_2D: +// setUIMode(ui); +// break; +// case Type_VR: +// mMapView.getMapAutoViewHelper().setScaleVRMode(true); +// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_VR); +// return; +// case Type_Light: +// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(false); +// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_DAY); +// mIsLightStyle = true; +// break; +// case Type_Night: +// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(false); +// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_NIGHT); +// mIsLightStyle = false; +// break; +// case Type_AUTO_LIGHT_Night: +// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(true); +// break; +// } + + } + } + + @Override + public void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng) { + MapAutoViewHelper mapAutoViewHelper = mMapView.getMapAutoViewHelper(); + if (mapAutoViewHelper != null) { + CallerLogger.INSTANCE.d(TAG, " 用户更改视距 currentThread : " + Thread.currentThread().getName()); + mVisualAngleMode = angelMode; + if (angelMode == MODE_CLOSE_SIGHT) { + if (mogoLatLng == null) { + CallerLogger.INSTANCE.e(TAG, "切换地图近景需要传入要移动的经纬度数据"); + return; + } + // 近景传入经纬度为点击地图上静态marker经纬度数据,为GPS坐标点。 + mapAutoViewHelper.setNearViewAnglePosition(new LonLatPoint(mogoLatLng.lon, mogoLatLng.lat), true); + } else { + mapAutoViewHelper.setMapViewVisualAngle(angelMode.getCode()); + } + } + } + + @Override + public VisualAngleMode getCurrentMapVisualAngle() { + return mVisualAngleMode; + } + + @Override + public void moveToCenter(MogoLatLng latLng) { + moveToCenter(latLng, true); + } + + private boolean checkAMapView() { + if (mMapView == null || mMapView.getMapAutoViewHelper() == null) { + CallerLogger.INSTANCE.e(TAG, "自研mapView实例为空,请检查"); + return false; + } + return true; + } + + @Override + public void moveToCenter(MogoLatLng latLng, boolean animate) { + CallerLogger.INSTANCE.d(TAG, "move to center " + latLng); + if (latLng == null || latLng.lat == 0.0d || latLng.lon == 0.0d) { + CallerLogger.INSTANCE.e(TAG, "latlng = null or is illegal"); + return; + } + if (DebugConfig.isDebug()) { + CallerLogger.INSTANCE.d(TAG, Log.getStackTraceString(new Throwable())); + } + loseLockMode(); + mMapView.getMapAutoViewHelper().animateCamera(new LonLatPoint(latLng.lon, latLng.lat)); + } + + @Override + public void showMyLocation(boolean visible) { + CallerLogger.INSTANCE.d(TAG, "showMyLocation1 " + visible); + // 如果是VR模式 + if (mCurrentUI == EnumMapUI.Type_VR) { + return; + } + // 不是VR模式情况强制刷新下 + if (checkAMapView()) { + MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle(); + if (visible) { + // 强制刷新一遍车标 + style.myLocationIcon(mCarCursorOption.getCarCursorRes()); + } + mMapView.getMapAutoViewHelper().setMyLocationStyle(style); + } + } + + @Override + public void showMyLocation(View view) { + if (DebugConfig.isDebug()) { + CallerLogger.INSTANCE.d(TAG, Log.getStackTraceString(new Throwable())); + } + if (checkAMapView()) { + MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle(); + style.myLocationIcon(BitmapDescriptorFactory.INSTANCE.convertViewToBitmap(view)); + mMapView.getMapAutoViewHelper().setMyLocationStyle(style); + } + } + + public void initMyLocation() { + if (checkAMapView()) { + mMapView.getMapAutoViewHelper().setMyLocationEnabled(true); + MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle(); + style.setLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER); + style.interval(1000); + // style.anchor( 0.5F, 0.5F ); + // style.strokeColor( Color.TRANSPARENT ); + // style.strokeWidth( 0 ); + // style.radiusFillColor( Color.TRANSPARENT ); + mMapView.getMapAutoViewHelper().setMyLocationStyle(style); + } + } + + @Override + public void recoverLockMode() { + if (checkAMapView()) { + if (mCurrentUI == EnumMapUI.Type_VR) { + return; + } + CallerLogger.INSTANCE.d(TAG, "锁车"); + mMapView.getMapAutoViewHelper().setLockMode(true); + mIsCarLocked = true; + } + } + + @Override + public void loseLockMode() { + if (mCurrentUI == EnumMapUI.Type_VR) { + return; + } + CallerLogger.INSTANCE.d(TAG, "解锁锁车"); + mMapView.getMapAutoViewHelper().setLockMode(false); + mIsCarLocked = false; + } + + @Override + public void setLockZoom(int var1) { + mLockZoom = var1; + } + + @Override + public void displayOverview(Rect bounds) { + + } + + @Override + public float getScalePerPixel() { + return getMap().getScalePerPixel(); + } + + @Override + public float getZoomLevel() { + return getMap().getZoomLevel(); + } + + @Override + public float getRoadWidth(double lon, double lat, float angle, boolean isGpsLocation, boolean isRTK) { + return getMap().getRoadWidth(lon, lat, angle, isGpsLocation, isRTK); + } + + @Override + public MogoLatLng getCameraNorthEastPosition() { + return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion().getRightTopPoint()); + } + + @Override + public MogoLatLng getCameraSouthWestPosition() { + try { + return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion().getLeftBottomPoint()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public MogoLatLng getWindowCenterLocation() { + try { + return ObjectUtils.fromAMap(mMapView.getMapAutoViewHelper().getCenter()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void setPointToCenter(double mapCenterX, double mapCenterY) { + if (checkAMapView()) { + if (mCurrentUI == EnumMapUI.Type_VR) { + return; + } + CallerLogger.INSTANCE.d(TAG, "setPointToCenter x : " + mapCenterX + " y : " + mapCenterY); + mMapView.getMapAutoViewHelper().setPointToCenter((float) mapCenterX, (float) mapCenterY); + } + } + + @Override + public Point getLocationPointInScreen(MogoLatLng latLng) { + if (checkAMapView()) { + try { + return MapTools.INSTANCE.toScreenLocation(ObjectUtils.fromMogo(latLng)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + return null; + } + + @Override + public MogoLatLng getLocationMogoLatLngInScreen(Point point) { + if (checkAMapView()) { + try { + return ObjectUtils.fromAMap( + MapTools.INSTANCE.fromScreenLocation(point)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + return null; + } + + @Override + public void setRenderFps(int fps) { + if (checkAMapView()) { + if (mMapView.getMapAutoViewHelper() != null) { + mMapView.getMapAutoViewHelper().setRenderFps(fps); + CallerLogger.INSTANCE.d(TAG, "设置刷新帧率 fps = " + fps); + } + } + } + + @Override + public void showBounds(String tag, MogoLatLng carPosition, List lonLats, Rect bound, boolean lockCarPosition) { + if (!checkAMapView()) { + return; + } + if (mCurrentUI == EnumMapUI.Type_VR) { + CallerLogger.INSTANCE.w(TAG, "vr 模式下忽略该设置"); + return; + } + CallerLogger.INSTANCE.i(TAG, "showBounds : " + tag + " , " + carPosition.toString() + " , " + bound.toShortString() + " , " + lockCarPosition); + try { + LatLngBounds latLngBounds = MogoMapUtils.getLatLngBounds(carPosition, lonLats, lockCarPosition); + if (!lockCarPosition) { + loseLockMode(); + } + mMapView.getMapAutoViewHelper().setCenter(ObjectUtils.fromMogo(carPosition)); + mMapView.getMapAutoViewHelper().moveCamera(CameraUpdateFactory.INSTANCE.newLatLngBounds(latLngBounds, bound.left, bound.right, bound.top, bound.bottom)); + } catch (Exception e) { + CallerLogger.INSTANCE.e(TAG, "tag : " + tag + " error : " + e); + } + } + + @Override + public void forceRender() { + if (checkAMapView()) { + mMapView.getMapAutoViewHelper().runOnDrawFrame(); + } + } + + @Override + public float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception { + if (p1 == null || p2 == null) { + throw new Exception("计算距离的点不能为 null"); + } + return MogoMapUtils.calculateLineDistance(ObjectUtils.fromMogo(p1), ObjectUtils.fromMogo(p2)); + } + + + @Override + public EnumMapUI getCurrentUiMode() { + return mCurrentCarUIMode; + } + + @Override + public void changeMyLocation(Location location) { + } + + @Override + public synchronized boolean isCarLocked() { + return mMapView.getMapAutoViewHelper().getLockMode(); + } + + @Override + public void setCarCursorOption(CarCursorOption option) { + if (mCurrentUI == EnumMapUI.Type_VR) { + return; + } + if (mCarCursorOption != null && mCarCursorOption != DEFAULT_OPTION) { + mCarCursorOption.destroy(); + } + if (option != null) { + try { + mCarCursorOption = option.clone(); + } catch (Exception e) { + mCarCursorOption = DEFAULT_OPTION; + } + } else { + mCarCursorOption = DEFAULT_OPTION; + } + if (!checkAMapView()) { + return; + } + + if (mMapView.getMapAutoViewHelper() == null) { + return; + } + MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle(); + if (mCarCursorOption.getCarCursorBmp() != null && !mCarCursorOption.getCarCursorBmp().isRecycled()) { + style.myLocationIcon(mCarCursorOption.getCarCursorBmp()); + } else { + if (mCarCursorOption.getCarCursorRes() != 0) { + style.myLocationIcon(mCarCursorOption.getCarCursorRes()); + } + } + mMapView.getMapAutoViewHelper().setMyLocationStyle(style); + } + + @Override + public MapCameraPosition getMapCameraPosition() { + if (checkAMapView()) { + CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition(); + return ObjectUtils.fromAMap(cameraPosition); + } + return null; + } + + @Override + public void changeBearing(float bearing) { + if (checkAMapView()) { + mMapView.getMapAutoViewHelper().setMapViewRotation(bearing); + } + } + + @Override + public void changeMapViewAngle(int type) { + if (checkAMapView()) { + //mMapView.getMapAutoViewHelper().testMapViewAngle(type); + } + } + + @Override + public void changeCurrentIcon(int iconId) { + if (checkAMapView()) { + mMapView.getMapAutoViewHelper().getMyLocationStyle().myLocationIcon(iconId, true); + } + } + + @Override + public long getTileId(double lon, double lat) { + return getMap().getUIController().getTileId(lon, lat); + } + + @Override + public int getSpeedLimmit(double lon, double lat, float angle) { + return MapDataApi.INSTANCE.getLimitSpeed(lon, lat, angle); + } + + @Override + public void onLocationChanged(@NotNull com.zhidaoauto.map.sdk.open.location.MogoLocation location) { + MogoLocation mLastLocation = ObjectUtils.fromLocation(location); + UiThreadHandler.post(() -> CallerMapLocationListenerManager.INSTANCE.invokeMapLocationChangeListener(mLastLocation)); + + Location sysLocation = new Location(location.getProvider()); + sysLocation.setAltitude(location.getAltitude()); + sysLocation.setLatitude(location.getLat()); + sysLocation.setLongitude(location.getLon()); + sysLocation.setProvider(location.getProvider()); + sysLocation.setAccuracy(location.getAcceleration()); + sysLocation.setTime(location.getDuration()); + sysLocation.setBearing((float) location.getHeading()); + sysLocation.setSpeed(location.getSpeed()); + + // 将有效经纬度暂存本地,提供给下一次的Http-DNS使用,防止首次请求位置获取不到 + if (location.getLat() > 0) { + SharedPrefsMgr.getInstance(mMapView.getContext()) + .putString(SharedPrefsConstants.LOCATION_CITY_CODE, location.getCityCode()); + SharedPrefsMgr.getInstance(mMapView.getContext()) + .putString(SharedPrefsConstants.LOCATION_LATITUDE, String.valueOf(location.getLat())); + SharedPrefsMgr.getInstance(mMapView.getContext()) + .putString(SharedPrefsConstants.LOCATION_LONGITUDE, String.valueOf(location.getLon())); + } + + + if (MogoCarLocationChangedListenerRegister.getInstance().getListener() != null) { + MogoCarLocationChangedListenerRegister.getInstance().getListener().onCarLocationChanged2(sysLocation); + } + if (checkAMapView() && mMapLoaded) { + // 地图初始化完成后,每隔5s自动判断当前地图的模式 + if (mIsFirstLocated) { + if (!mIsDelayed) { + mIsDelayed = true; + UiThreadHandler.postDelayed(() -> { + //CallerLogger.INSTANCE.d(TAG, "倒计时结束"); + mIsFirstLocated = false; + }, 5_000L); + } + } else { + mIsFirstLocated = true; + mIsDelayed = false; + CallerLogger.INSTANCE.d(TAG, "同步定位:" + GsonUtils.toJson(location)); + MapStyleController.getInstance().onLocationChanged(location, this); + } + } + } + + @Override + public void onMapClick(@Nullable LonLatPoint lonLatPoint) { + MogoMapListenerHandler.getInstance().onMapClick(ObjectUtils.fromAMap(lonLatPoint)); + } + + + @Override + public void onMapInit() { + CallerLogger.INSTANCE.i(TAG, "autoop--onMapInit: "); + MogoMapListenerHandler.getInstance().onMapLoaded(); + } + + @Override + public void onMapLoaded() { + CallerLogger.INSTANCE.i(TAG, "autoop--onMapLoaded: "); + mMapLoaded = true; + CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition(); + Trace.beginSection("timer.onCameraChangeFinish"); + MogoMapListenerHandler.getInstance().onMapChanged(ObjectUtils.fromAMap(cameraPosition.getTarget()), + cameraPosition.getZoom(), + cameraPosition.getTilt(), + cameraPosition.getBearing()); + Trace.endSection(); + initMapView(); + initMyLocation(); + } + + @Override + public boolean onTouch(@Nullable MotionEvent motionEvent) { + MogoMapListenerHandler.getInstance().onTouch(motionEvent); + return false; + } + + @Override + public void onMarkClick(@NotNull Marker markerInfo) { + mMarkerClickHandler.handleMarkerClicked(markerInfo); + } + + @Override + public void onRoadLoaded(@Nullable String s) { + CallerLogger.INSTANCE.i(TAG, "autoop--onMapLoaded: "); + + } + + @Override + public void onMapStatusChanged(int type, int value) { + //CallerLogger.INSTANCE.i(TAG, "mapop--onMapStatusChanged-: " + type + "," + value); + } + + @Override + public void onMapViewVisualAngleChange(int i) { + CallerLogger.INSTANCE.d(TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().getName()); + mVisualAngleMode = getVisualAngleMode(i); + MogoMapListenerHandler.getInstance().onMapVisualAngleChanged(mVisualAngleMode); + } + + private VisualAngleMode getVisualAngleMode(int mode) { + switch (mode) { + case 0: + return MODE_CLOSE_SIGHT; + case 1: + return MODE_MEDIUM_SIGHT; + case 2: + return MODE_LONG_SIGHT; + case 3: + return MAP_STYLE_VR_ANGLE_300; + case 4: + return MAP_STYLE_VR_ANGLE_TOP; + case 5: + return MAP_STYLE_VR_ANGLE_CROSS; + default: + throw new IllegalStateException("mode is unCorrect"); + } + } + + @Override + public void onCameraChange(int type, int value) { + //CallerLogger.INSTANCE.i(TAG, "mapop--onCameraChange-: " + type + "," + value); + } + + @Override + public void onCameraChangeFinish(@Nullable CameraPosition cameraPosition) { + // CallerLogger.INSTANCE.i( TAG, "mapop--onCameraChangeFinish-: " + cameraPosition + "cost:" + ( System.currentTimeMillis() - startTime ) ); + if (cameraPosition != null) { + Trace.beginSection("timer.onCameraChangeFinish"); + MogoMapListenerHandler.getInstance().onMapChanged(ObjectUtils.fromAMap(cameraPosition.getTarget()), + cameraPosition.getZoom(), + cameraPosition.getTilt(), + cameraPosition.getBearing()); + Trace.endSection(); + } + } + + @Override + public void emphasizeMyLocation() { + + } + + @Override + public void onChangeMapStyle(int styleId) { + + EnumMapUI last = mCurrentUI; + CallerLogger.INSTANCE.d(TAG, "currentMapStyle = " + styleId); + + if (styleId == MapAutoApi.MAP_STYLE_DAY + || styleId == MapAutoApi.MAP_STYLE_DAY_NAV) { + mCurrentUI = EnumMapUI.Type_Light; + } else if (styleId == MapAutoApi.MAP_STYLE_NIGHT + || styleId == MapAutoApi.MAP_STYLE_NIGHT_NAV) { + mCurrentUI = EnumMapUI.Type_Night; + } else if (styleId == MapAutoApi.MAP_STYLE_VR) { + mCurrentUI = EnumMapUI.Type_VR; + // 进入vr模式的时候自动切换到车头朝上 + change2CarUp(); + } + + if (last == mCurrentUI) { + CallerLogger.INSTANCE.d(TAG, "currentUI is same as last = " + mCurrentUI); + return; + } + + // vr 模式切换到普通模式下,保持之前的白天模式 wtf. + if (last == EnumMapUI.Type_VR && mCurrentUI != EnumMapUI.Type_Light) { + if (mIsLightStyle) { + changeMapMode(EnumMapUI.Type_Light); + return; + } + } + CallerLogger.INSTANCE.d(TAG, Log.getStackTraceString(new Throwable())); + if (mCurrentUI != null) { + UiThreadHandler.post(() -> { + try { + CallerLogger.INSTANCE.d(TAG, "currentUI = " + mCurrentUI); + MogoMapListenerHandler.getInstance().onMapModeChanged(mCurrentUI); + CallerMapStyleListenerManager.INSTANCE.invokeMapStyleChange(styleId); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + } + + /** + * 切换到车头朝上 + */ + private void change2CarUp() { + mMapView.getMapAutoViewHelper().setMapViewPerspective(MapAutoApi.MAP_PERSPECTIVE_UP_CAR); + } + + + @Override + public void onStyleAutoChanged(boolean isVrMode) { + if (isVrMode) { + if (mCurrentUI != EnumMapUI.Type_VR) { + CallerLogger.INSTANCE.d(TAG, "自动切换为vr模式"); + changeMapMode(EnumMapUI.Type_VR); + } + } else { + if (mCurrentUI == EnumMapUI.Type_VR) { + CallerLogger.INSTANCE.d(TAG, "自动切换为2D模式"); + if (mIsLightStyle) { + changeMapMode(EnumMapUI.Type_Light); + } else { + changeMapMode(EnumMapUI.Type_Night); + } + } + } + } + + private boolean mRtkEnable = false; + + @Override + public void rtkEnable(boolean enable) { + try { + mRtkEnable = !mRtkEnable; + TipToast.shortTip(mRtkEnable ? "已开启rtk道路匹配" : "已开启gps道路匹配"); + mMapView.getLocationClient().rtkEnable(mRtkEnable); + } catch (Exception e) { + CallerLogger.INSTANCE.e(TAG, "rtkEnable has exception : " + e); + } + } + + @Override + public void syncLocation2Map(JSONObject data) { + if (!checkAMapView()) { + return; + } + if (data == null) { + CallerLogger.INSTANCE.d(TAG, "停止使用rtk定位数据"); + return; + } + double lon = data.optDouble("lon", -1); + double lat = data.optDouble("lat", -1); + double alt = data.optDouble("alt", -1); + double heading = data.optDouble("heading", -1); + double acceleration = data.optDouble("acceleration", -1); + double yawRate = data.optDouble("yawRate", -1); + double speed = data.optDouble("speed", -1); + long systemTime = data.optLong("systemTime"); + long satelliteTime = data.optLong("satelliteTime"); + + if (lon == -1) { + return; + } + RTKAutopilotLocationBean bean = new RTKAutopilotLocationBean(); + bean.setYaw_rate(yawRate); + bean.setHeading(heading); + bean.setAcceleration(acceleration); + bean.setAlt(alt); + bean.setSystemTime(systemTime); + bean.setSatelliteTime(satelliteTime); + bean.setLon(lon); + bean.setGnss_speed(((float) speed)); + bean.setLat(lat); + // 使用外部定位数据修改自车位置 + mMapView.getLocationClient().updateRTKAutoPilotLocation(bean); + CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getContext()).updateLocation(bean); + CallerMapDataCollectorManager.INSTANCE.setIsInit(); + } + + @Override + public void syncLocation2Map(MessagePad.GnssInfo gnssInfo) { + if (!checkAMapView()) { + return; + } + if (gnssInfo.getLongitude() == -1) { + return; + } + RTKAutopilotLocationBean bean = new RTKAutopilotLocationBean(); + bean.setYaw_rate(gnssInfo.getYawRate()); + bean.setHeading(gnssInfo.getHeading()); + bean.setAcceleration(gnssInfo.getAcceleration()); + bean.setAlt(gnssInfo.getAltitude()); + bean.setSystemTime(Double.valueOf(gnssInfo.getSystemTime()).longValue()); + bean.setSatelliteTime(Double.valueOf(gnssInfo.getSatelliteTime()).longValue()); + bean.setLon(gnssInfo.getLongitude()); + bean.setLat(gnssInfo.getLatitude()); + bean.setGnss_speed(((float) gnssInfo.getGnssSpeed())); + // 使用外部定位数据修改自车位置 + mMapView.getLocationClient().updateRTKAutoPilotLocation(bean); + CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getContext()).updateLocation(bean); + CallerMapDataCollectorManager.INSTANCE.setIsInit(); + } + + @Override + public void openVrMode(boolean zoomGestureEnable) { + try { + mMapView.getMapAutoViewHelper().setZoomGesturesEnabled(zoomGestureEnable); + mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_VR); + } catch (Exception e) { + e.printStackTrace(); + } + } + + Map roadCacheMap = new ConcurrentHashMap<>(); + private final RoadCacheWrapper noCache = new RoadCacheWrapper(null); + + @Override + public void clearRoadCacheById(String id) { + roadCacheMap.remove(id); + } + + @Override + public double[] matchRoad(String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK) { + return matchRoad(id, lon, lat, angle, isGpsLocation, isRTK, true); + } + + /** + * 带缓存的道路匹配算法 + *

+ * 使用{@link MapDataApi#INSTANCE#getSinglePointMatchRoad()}这个方法获取道路数据会存在一定耗时,目前是4-10ms,因为请求频繁,为了 + * 减小这部分耗时,使用一个ConcurrentHashMap{@link #roadCacheMap}缓存道路数据,此缓存是以目标车id为key,道路数据为value,以此减少 + * 道路数据获取次数。 + *

+ * 当出现道路改变的情况,需要重新获取道路数据,采用递归的方式重获道路数据以及添加缓存,为了避免一直获取不到道路数据,一直递归,增加useCache参数跳出递归。 + *

+ * 道路改变的情况主要分为: + * 1. 目标车距离道路中心线距离超过阈值 matchThreshold(取路宽的1/4为阈值); + * 2. 目标车到道路中心线的映射点不在道路上(此判断在{@link PointInterpolatorUtil#mergeToRoad(double, double, List)}),也就是说已经驶出了这条道路 + * + * @param id 目标车唯一标识 + * @param lon 目标车经度 + * @param lat 目标车纬度 + * @param angle 目标车角度 + * @param isGpsLocation true-使用gps定位数据 + * @param isRTK true-使用rtk数据 + * @param usdCache true-使用道路缓存 false-不使用道路缓存 + * @return double[]{匹配后经度,匹配后纬度,目标车距离车道中心线距离},若匹配后经纬度值为-1,则没有匹配成功 + */ + private double[] matchRoad(String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK, boolean usdCache) { + double[] wgs = new double[]{lon, lat}; + long start = System.currentTimeMillis(); + + RoadCacheWrapper roadCache = roadCacheMap.get(id); + double matchThreshold = -1; + if (roadCache == null || roadCache == noCache) { + SinglePointRoadInfo singlePointRoadInfo = MapDataApi.INSTANCE.getSinglePointMatchRoad(((float) wgs[0]), ((float) wgs[1]), ((float) angle), isGpsLocation, isRTK); + if (singlePointRoadInfo != null && singlePointRoadInfo.getCoords() != null && !singlePointRoadInfo.getCoords().isEmpty()) { + roadCache = new RoadCacheWrapper(singlePointRoadInfo.getCoords()); + roadCache.setLaneWidth(singlePointRoadInfo.getLaneWidth()); + } + } + + if (roadCache != null + && roadCache.getRoad() != null + && !roadCache.getRoad().isEmpty()) { + // 未获取到道路中心线数据 + start = System.currentTimeMillis(); + matchThreshold = roadCache.getLaneWidth() / 4; + + double[] matchedPoint = PointInterpolatorUtil.mergeToRoad(wgs[0], wgs[1], roadCache.getRoad()); + if (matchThreshold > 0 && matchedPoint[2] > 0 && matchedPoint[2] <= matchThreshold) { + // 目标车在阈值范围内 + roadCacheMap.put(id, roadCache); + // CallerLogger.INSTANCE.i("timer-matchRoad-3", "cost " + (System.currentTimeMillis() - start) + "ms"); + return matchedPoint; + // CallerLogger.INSTANCE.i("timer-matchRoad-2", "cost " + (System.currentTimeMillis() - start) + "ms roadId: "+roadCache.getLastLat()); + } else if (matchedPoint[2] > matchThreshold && matchedPoint[2] < 1.5) { + // 目标车在阈值范围外,也就是说距离道路中心线太远了,就不吸附了 + return null; + } else { + // 目标车到道路中心线的映射点不在道路上,也就是已经使出了缓存的那条道路,需要重新获取一条道路,用useCache这个参数来避免重复递归 + roadCacheMap.put(id, noCache); + // CallerLogger.INSTANCE.i("timer-matchRoad-2", "cost " + (System.currentTimeMillis() - start) + "ms roadId: " + roadCache.getLastLat()); + if (usdCache) { + return matchRoad(id, lon, lat, angle, isGpsLocation, isRTK, false); + } else { + return null; + } + } + } + roadCacheMap.put(id, noCache); + return null; + } + + @Override + public String getMarkerInfoResName(String speedVal) { + return ResIdCache.getVal(speedVal); + } + + @Override + public void setMarkerInfoResName(String speedVal, String val) { + ResIdCache.putVal(speedVal, val); + } + + @Override + public void setMapDAngle(float angle) { + mMapView.getMapAutoViewHelper().setMapDAngle(angle); + } + +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java new file mode 100644 index 0000000000..c234b670cc --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java @@ -0,0 +1,326 @@ +package com.mogo.map; + +import android.content.Context; +import android.graphics.Point; + +import com.mogo.eagle.core.data.traffic.TrafficData; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.marker.AMapInfoWindowAdapter; +import com.mogo.map.marker.AMapMarkerWrapper; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.marker.MogoMarkersHandler; +import com.mogo.map.overlay.AMapPolylineWrapper; +import com.mogo.map.overlay.IMogoPolyline; +import com.mogo.map.overlay.MogoPolylineOptions; +import com.mogo.map.uicontroller.AMapUIController; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.MapAutoApi; +import com.zhidaoauto.map.sdk.open.data.MapDataApi; +import com.zhidaoauto.map.sdk.open.data.SinglePointRoadInfo; +import com.zhidaoauto.map.sdk.open.marker.Marker; +import com.zhidaoauto.map.sdk.open.marker.MarkerHelper; +import com.zhidaoauto.map.sdk.open.marker.MarkerOptions; +import com.zhidaoauto.map.sdk.open.marker.MarkerSimpleData; +import com.zhidaoauto.map.sdk.open.marker.MultiPointOverlayOptions; +import com.zhidaoauto.map.sdk.open.poyline.Polyline; +import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.tools.MapTools; +import com.zhidaoauto.map.sdk.open.view.MapAutoView; +import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author congtaowang + * @since 2019-12-18 + *

+ * 代理自研AMap + */ +public class AMapWrapper implements IMogoMap { + + private static final String TAG = "AMapWrapper"; + + private static MapAutoViewHelper sAMap; + private IMogoMapUIController mUIcontroller; + private MapAutoViewHelper mAMap; + private MapAutoView mMapView; + private IMogoUiSettings mUiSettings; + + public AMapWrapper(MapAutoViewHelper map, MapAutoView mapView, IMogoMapUIController controller) { + Logger.i(TAG, "autoop--AMapWrapper: init" + this); + this.mAMap = map; + sAMap = map; + this.mMapView = mapView; + mUIcontroller = controller; + // 设置实现自定义 info window + MapAutoApi.INSTANCE.setInfoWindowAdapter(new AMapInfoWindowAdapter()); + AMapUIController.getInstance().initClient(mUIcontroller); + } + + public static MapAutoViewHelper getAMap() { + return sAMap; + } + + @Override + public IMogoUiSettings getUiSettings() { + if (!checkAMap()) { + return null; + } + if (mUiSettings == null) { + mUiSettings = new AMapUiSettingsWrapper(mAMap); + } + return mUiSettings; + } + + @Override + public IMogoMapUIController getUIController() { + return mUIcontroller; + } + + @Override + public IMogoMarker addMarker(String tag, MogoMarkerOptions options) { + //Logger.i(TAG, "autoop-addMarker: " + tag + ",MogoMarkerOptions:" + options + ",AMap:" + (mAMap != null) + ",this:" + this); + if (!checkAMap()) { + return null; + } + MarkerOptions markerOptions = ObjectUtils.fromMogo(options); + if (markerOptions == null) { + Logger.e(TAG, "marker参数为空"); + return null; + } + final IMogoMarker mogoMarker = new AMapMarkerWrapper(mAMap.addMarker(markerOptions), options); + if (options.isAutoManager()) { + MogoMarkersHandler.getInstance().add(tag, mogoMarker); + } + return mogoMarker; + } + + @Override + public void updateBatchMarkerPosition(ArrayList optionsArrayList) { + if (!checkAMap()) { + return; + } + ArrayList markerOptionsArrayList = new ArrayList<>(); + for (MessagePad.TrackedObject mogoMarkerOptions : optionsArrayList) { + MarkerSimpleData markerOptions = ObjectUtils.fromTrafficData(mogoMarkerOptions); + if (markerOptions == null) { + Logger.e(TAG, "marker参数为空"); + break; + } + markerOptionsArrayList.add(markerOptions); + } + + MarkerHelper.INSTANCE.updateBatchMarkerPositon(markerOptionsArrayList,false,8.0f,0,100); + } + + @Override + public String addPreVehicleModel(int type, int modelRes) { + try { + return MarkerHelper.INSTANCE.addPreVehicleModel(type, modelRes); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void removeMarker(String uuidString) { + try { + MarkerHelper.INSTANCE.removeMarker(uuidString); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public ArrayList addMarkers(String tag, ArrayList options, boolean moveToCenter) { + if (!checkAMap()) { + return null; + } + + if (options == null || options.isEmpty()) { + return null; + } + + ArrayList markers = new ArrayList<>(); + ArrayList markerOptions = new ArrayList<>(); + ArrayList mogoMarkers = new ArrayList<>(); + for (MogoMarkerOptions option : options) { + if (option == null) { + continue; + } + MarkerOptions mo = ObjectUtils.fromMogo(option); + if (mo == null) { + continue; + } + markerOptions.add(mo); + } + if (markerOptions.isEmpty()) { + return null; + } + MultiPointOverlayOptions multiPointOverlayOptions = new MultiPointOverlayOptions(); + multiPointOverlayOptions.setData(markerOptions); + multiPointOverlayOptions.setMarkerIcon(R.drawable.marker_blue); + List data = mAMap.addMarkers(multiPointOverlayOptions).getOptions().getData(); + for (int i = 0; i < data.size(); i++) { + markers.add(new Marker(data.get(i))); + } + if (markers == null || markers.isEmpty()) { + return null; + } + for (int i = 0; i < markers.size(); i++) { + Marker marker = markers.get(i); + if (marker == null) { + continue; + } + mogoMarkers.add(new AMapMarkerWrapper(marker, options.get(i))); + } + MogoMarkersHandler.getInstance().add(tag, mogoMarkers); + return mogoMarkers; + } + + @Override + public void clear() { + if (checkAMap()) { + mAMap.clearPanel(); + } + } + + @Override + public void clear(boolean isKeepMyLocationOverlay) { + if (checkAMap()) { + mAMap.clearPanel(); + } + } + + @Override + public void setPointToCenter(int x, int y) { + if (checkAMap()) { + LonLatPoint lonLatPoint = MapTools.INSTANCE.fromScreenLocation(new Point(x, y)); + mAMap.setCenter(lonLatPoint); + } + } + + @Override + public void setTouchPoiEnable(boolean touchPoiEnable) { + if (checkAMap()) { + mAMap.setTouchPoiEnable(touchPoiEnable); + } + } + + @Override + public void setTrafficEnable(boolean enable) { + if (checkAMap()) { + mAMap.setTraffic(enable); + } + } + + @Override + public void showBuildings(boolean enabled) { + if (checkAMap()) { + mAMap.showBuildings(enabled); + } + } + + @Override + public void showIndoorMap(boolean enable) { + if (checkAMap()) { +// mAMap.showIndoorMap( enable ); + } + } + + @Override + public void showMapText(boolean enable) { + if (checkAMap()) { + mAMap.showMapText(enable); + } + } + + @Override + public void stopAnimation() { + if (checkAMap()) { +// mAMap.stopAnimation(); + } + } + + @Override + public float getScalePerPixel() { + if (checkAMap()) { + return mAMap.getScalePerPixel(); + } + return 0; + } + + @Override + public void changeZoom(float zoom) { + Logger.d(TAG, "changeZoom %s", zoom); + if (checkAMap()) { + mAMap.setZoom((int) zoom); + } + } + + @Override + public float getZoomLevel() { + if (checkAMap()) { + try { + return mAMap.getZoom(); + } catch (Exception e) { + + } + } + return 0; + + + } + + @Override + public IMogoPolyline addPolyline(MogoPolylineOptions options) { + if (checkAMap()) { + PolylineOptions polylineOptions = ObjectUtils.fromMogo(options); + Logger.d(TAG, "addPolyline %s", polylineOptions.toString()); + if (polylineOptions == null) { + return null; + } + Polyline polyline = null; + if (polylineOptions.getLineWidth() > 0) { + polyline = mAMap.drawThickLine(polylineOptions); + } else { + polyline = mAMap.drawLine(polylineOptions); + } + return new AMapPolylineWrapper(polyline, options); + } + return null; + } + + @Override + public String getMapVersion() { + return MapAutoApi.INSTANCE.getSDKVersion(); + } + + private boolean checkAMap() { + mAMap = mMapView.getMapAutoViewHelper(); + sAMap = mAMap; + if (mAMap == null) { + Logger.e(TAG, "自研map实例为空,请检查"); + return false; + } + return true; + } + + @Override + public float getRoadWidth(double lon, double lat, float angle, boolean isGpsLocation, boolean isRTK) { + SinglePointRoadInfo singlePointRoadInfo = MapDataApi.INSTANCE.getSinglePointMatchRoad(lon, lat, angle, isGpsLocation, isRTK); + + return singlePointRoadInfo != null ? singlePointRoadInfo.getLaneWidth() : 0; + } + + private Context getContext() { + return mMapView.getContext(); + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/CustomMapApiBuilder.java b/libraries/mogo-map/src/main/java/com/mogo/map/CustomMapApiBuilder.java new file mode 100644 index 0000000000..f3ade54241 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/CustomMapApiBuilder.java @@ -0,0 +1,90 @@ +package com.mogo.map; + +import android.content.Context; +import android.util.Log; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.location.ALocationClient; +import com.mogo.map.location.IMogoLocationClient; +import com.mogo.map.search.GeocodeSearchClient; +import com.mogo.map.search.PoiSearchClient; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.search.poisearch.IMogoPoiSearch; +import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; +import com.mogo.map.search.traffic.IMogoTrafficSearch; +import com.mogo.map.uicontroller.AMapUIController; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.zhidaoauto.map.sdk.open.MapAutoApi; +import com.zhidaoauto.map.sdk.open.MapParams; +import com.zhidaoauto.map.sdk.open.view.MapAutoView; + +/** + * @author congtaowang + * @since 2020/12/9 + *

+ * 描述 + */ +@Route(path = MapApiPath.PATH) +public class CustomMapApiBuilder implements IMogoMapApiBuilder { + + private static final String TAG = "CustomMapApiBuilder"; + + @Override + public IMogoGeoSearch getGeoSearch(Context context) { + return new GeocodeSearchClient(context); + } + + @Override + public IMogoLocationClient getLocationClient(Context context) { + return new ALocationClient(context); + } + + @Override + public IMogoMapUIController getMapUIController() { + return AMapUIController.getInstance(); + } + + + @Override + public IMogoPoiSearch getPoiSearchClient(Context context, MogoPoiSearchQuery query) { + return new PoiSearchClient(context, query); + } + + @Override + public IMogoMapView getMapView(Context context) { + Log.d(TAG, "setDebugMode==true"); + MapParams mapParams = MapParams.Companion.init(); + mapParams.setDebugMode(false) + //todo 1-使用本地地图数据,0-使用在线地图数据 + //.setDataFileSource(1) + .setCoordinateType(MapParams.COORDINATETYPE_GCJ02) + .setPerspectiveMode(MapParams.MAP_PERSPECTIVE_3D) + // .setZoom( 20 ) + // .setPointToCenter( 0.734375f, 0.5f ) + //todo 2D模式下需要注意ADAS部分遮挡 + .setPointToCenter(0.5f, 0.5f) + .setStyleMode(MapParams.MAP_STYLE_VR); + + MapAutoApi.INSTANCE.init(context, mapParams); + MapAutoView mapAutoView = new MapAutoView(context); + //mapAutoView.registerRenderListener(l -> Log.i(TAG, "renderTime: " + l)); + IMogoMapView mapView = new AMapViewWrapper(mapAutoView); + return mapView; + } + + @Override + public IMogoTrafficSearch getTrafficSearch() { + return null; + } + + @Override + public void destroy() { + + } + + @Override + public void init(Context context) { + Logger.d(TAG, "init"); + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/Interrupter.java b/libraries/mogo-map/src/main/java/com/mogo/map/Interrupter.java new file mode 100644 index 0000000000..cd56fad840 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/Interrupter.java @@ -0,0 +1,16 @@ +package com.mogo.map; + +/** + * @author congtaowang + * @since 2020-04-10 + *

+ * 拦截器 + */ +public interface Interrupter { + + /** + * 是否拦截 + * @return true - 拦截, false - 不拦截 + */ + boolean interrupt(); +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MapCenterPoint.java b/libraries/mogo-map/src/main/java/com/mogo/map/MapCenterPoint.java new file mode 100644 index 0000000000..e396fa354d --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MapCenterPoint.java @@ -0,0 +1,19 @@ +package com.mogo.map; + +/** + * @author congtaowang + * @since 2020-04-10 + *

+ * 地图视图中心点 + */ +public class MapCenterPoint { + + public final double x; + public final double y; + + public MapCenterPoint( double x, double y ) { + this.x = x; + this.y = y; + } + +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MapStyleController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MapStyleController.java new file mode 100644 index 0000000000..5638199449 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MapStyleController.java @@ -0,0 +1,187 @@ +package com.mogo.map; + + +import com.mogo.commons.debug.DebugConfig; +import com.zhidaoauto.map.sdk.open.location.MogoLocation; + +import java.util.ArrayList; +import java.util.List; + +public +/** + * @author congtaowang + * @since 2020/12/25 + * + * 地图样式控制 + */ +class MapStyleController { + + + private static volatile MapStyleController sInstance; + + private boolean mIsInVrMode = false; + + private List< VrAreaFilter > mVrAreaFilters = new ArrayList<>(); + + private MapStyleController() { + mVrAreaFilters.add( new ShunYiArea() ); + mVrAreaFilters.add( new OCHArea() ); +// mVrAreaFilters.add( new HuiXinXiJieArea() ); + } + + public static MapStyleController getInstance() { + if ( sInstance == null ) { + synchronized ( MapStyleController.class ) { + if ( sInstance == null ) { + sInstance = new MapStyleController(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + public void onLocationChanged( MogoLocation location, IMapStyleAutoChangedListener listener ) { + if ( location == null ) { + return; + } + + // 网约车不自动切换vr、2d模式 + if ( DebugConfig.isOCHModule() ) { + return; + } + + boolean isInVrMode = false; + for ( VrAreaFilter vrAreaFilter : mVrAreaFilters ) { + if ( vrAreaFilter == null ) { + continue; + } + isInVrMode |= vrAreaFilter.isVrArea( location ); + if ( isInVrMode ) { + break; + } + } + if ( isInVrMode ) { + if ( !mIsInVrMode ) { + // 第一次进入 vr 区域,自动变为 vr 模式 + mIsInVrMode = true; + if ( listener != null ) { + listener.onStyleAutoChanged( true ); + } + } + } else { + if ( mIsInVrMode ) { + // 驶出 vr 区域,自动变为 2d 模式 + mIsInVrMode = false; + if ( listener != null ) { + listener.onStyleAutoChanged( false ); + } + } + } + } + + public interface IMapStyleAutoChangedListener { + void onStyleAutoChanged(boolean isVrMode); + } + + public interface VrAreaFilter { + default boolean isVrArea(MogoLocation location) { + if ( location == null ) { + return false; + } + return location.getLat() > getLeftBottomLat() && location.getLon() > getLeftBottomLon() + && location.getLat() < getRightTopLat() && location.getLon() < getRightTopLon(); + } + + double getLeftBottomLat(); + + double getLeftBottomLon(); + + double getRightTopLat(); + + double getRightTopLon(); + } + + public static class ShunYiArea implements VrAreaFilter { + + // 顺义一期高精地图范围(目前圈定了一个矩形区域,认为都是高精地图区域) + private final double leftBottomLat = 40.18728; + private final double leftBottomLon = 116.71194; + private final double rightTopLat = 40.20671; + private final double rightTopLon = 116.74804; + + @Override + public double getLeftBottomLat() { + return leftBottomLat; + } + + @Override + public double getLeftBottomLon() { + return leftBottomLon; + } + + @Override + public double getRightTopLat() { + return rightTopLat; + } + + @Override + public double getRightTopLon() { + return rightTopLon; + } + } + + public static class OCHArea implements VrAreaFilter { + + @Override + public double getLeftBottomLat() { + return 39.97645; + } + + @Override + public double getLeftBottomLon() { + return 116.41673; + } + + @Override + public double getRightTopLat() { + return 0; + } + + @Override + public double getRightTopLon() { + return 0; + } + } + + public static class HuiXinXiJieArea implements VrAreaFilter { + + @Override + public double getLeftBottomLat() { + return 39.96741320378243; + } + + @Override + public double getLeftBottomLon() { + return 116.41045709250723; + } + + @Override + public double getRightTopLat() { + return 39.98232698552779; + } + + @Override + public double getRightTopLon() { + return 116.41879656379113; + } + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/RoadCacheWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/RoadCacheWrapper.java new file mode 100644 index 0000000000..4f3a9c2497 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/RoadCacheWrapper.java @@ -0,0 +1,87 @@ +package com.mogo.map; + +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; + +import java.util.List; + +/** + * 道路数据缓存 + * + * @author tongchenfei + */ +public class RoadCacheWrapper { + private List road; + private double lastDistanceDiff; + private int roadLength = -1; + + private float laneWidth = -1; + + public RoadCacheWrapper(List road) { + setRoad(road); + } + + public List getRoad() { + return road; + } + + public void setRoad(List road) { + this.road = road; + if(road!=null) { + roadLength = road.size(); + } + } + + public double getLastDistanceDiff() { + return lastDistanceDiff; + } + + public void setLastDistanceDiff(double lastDistanceDiff) { + this.lastDistanceDiff = lastDistanceDiff; + } + + public double getLastLat(){ + if (roadLength != -1) { + return road.get(roadLength - 1).getLatitude(); + } + return 0; + } + + public double getLastLon(){ + if (roadLength != -1) { + return road.get(roadLength - 1).getLongitude(); + } + return 0; + } + + public float getLaneWidth() { + return laneWidth; + } + + public void setLaneWidth(float laneWidth) { + this.laneWidth = laneWidth; + } + + public boolean inCache(double lon, double lat) { + if (roadLength > 0) { + LonLatPoint start = road.get(0); + LonLatPoint end = road.get(roadLength - 1); + boolean latInRoad = false; + boolean lonInRoad = false; + if (start.getLatitude() > end.getLatitude()) { + latInRoad = lat <= start.getLatitude() && lat >= end.getLatitude(); + }else{ + latInRoad = lat >= start.getLatitude() && lat <= end.getLatitude(); + } + + if (start.getLongitude() > end.getLongitude()) { + lonInRoad = lon <= start.getLongitude() && lon >= end.getLongitude(); + }else{ + lonInRoad = lon >= start.getLongitude() && lon <= end.getLongitude(); + } + + return latInRoad && lonInRoad; + } + return false; + } + +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/Scene.java b/libraries/mogo-map/src/main/java/com/mogo/map/Scene.java new file mode 100644 index 0000000000..06b2ac8d91 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/Scene.java @@ -0,0 +1,55 @@ +package com.mogo.map; + +/** + * @author congtaowang + * @since 2020-04-10 + *

+ * 描述 + */ +public interface Scene { + + /** + * 普通场景 + */ + int COMMON = 0; + + /** + * 选点 + */ + int CHOOSE_POINT = 1; + + /** + * 导航 + */ + int NAVI = 2; + + /** + * 导航 vs 道路事件 + */ + int NAVI_WITH_ROAD_EVENT = 21; + + /** + * 巡航 + */ + int AIMLESS = 3; + + /** + * 巡航 vs 道路事件 + */ + int AIMLESS_WITH_ROAD_EVENT = 31; + + /** + * 路线规划 + */ + int CALCULATE_PATH = 4; + + /** + * 分类搜索 + */ + int CATEGORY_SEARCH = 5; + + /** + * V2X触发了预警场景 + */ + int CATEGORY_V2X_EVENT = 6; +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/location/ALocationClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/location/ALocationClient.java new file mode 100644 index 0000000000..29dc726857 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/location/ALocationClient.java @@ -0,0 +1,150 @@ +package com.mogo.map.location; + +import android.content.Context; +import android.os.Trace; + +import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.utils.ObjectUtils; +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; + +import java.util.Iterator; +import java.util.Set; + +/** + * @author congtaowang + * @since 2019-12-19 + *

+ * 自研定位 + */ +public class ALocationClient implements IMogoLocationClient { + + private static final String TAG = "ALocationClient"; + + private MogoLocation mLastLocation; + private final LocationListener mListener = new InternalLocationListener(); + + private boolean mIsDestroyed = false; + + public ALocationClient( Context context ) { + mClient = new LocationClient( context ); + mClient.registerListener( mListener ); + mLastLocation = ObjectUtils.fromLocation( mClient.getLastKnownMogoLocation() ); + if ( mLastLocation == null ) { + mLastLocation = new MogoLocation(); + } + } + + private LocationClient mClient; + + @Override + public void start() { + start( 2_000L ); + } + + @Override + public void start( long interval ) { + if ( mIsDestroyed ) { + destroyWarming(); + return; + } + if ( mClient != null ) { + mClient.start(); + } + } + + @Override + public void stop() { + if ( mIsDestroyed ) { + destroyWarming(); + return; + } + if ( mClient != null && mClient.isAGpsStarted() ) { + mClient.stop(); + } + } + + @Override + public void addLocationListener( IMogoLocationListener listener ) { + // do not impl. + } + + @Override + public void removeLocationListener( IMogoLocationListener listener ) { + // do not impl. + } + + @Override + public MogoLocation getLastKnowLocation() { + if ( mIsDestroyed ) { + destroyWarming(); + return null; + } + return mLastLocation; + } + + @Override + public synchronized void destroy() { + mIsDestroyed = true; + if ( mClient != null ) { + mClient.unRegisterListener( mListener ); + mClient.destory(); + } + mClient = null; + mLastLocation = null; + } + + private class InternalLocationListener implements LocationListener { + + @Override + public void onLocationChanged( @NotNull com.zhidaoauto.map.sdk.open.location.MogoLocation location ) { + if ( mIsDestroyed ) { + destroyWarming(); + return; + } + if ( location == null || + location.getLat() == 0.0D || + location.getLon() == 0.0D ) { + return; + } + Trace.beginSection( "timer.onLocationChanged" ); + mLastLocation = ObjectUtils.fromLocation( location ); + UiThreadHandler.post(() -> CallerMapLocationListenerManager.INSTANCE.invokeMapLocationChangeListener(mLastLocation)); + + Set< IMogoLocationListener > listeners = MogoLocationListenerRegister.getInstance().getListeners(); + synchronized ( listeners ) { + Iterator< IMogoLocationListener > listenerIterator = listeners.iterator(); + while ( listenerIterator.hasNext() ) { + listenerIterator.next().onLocationChanged( mLastLocation.clone() ); + } + } + Trace.endSection(); + } + } + + private void destroyWarming() { + CallerLogger.INSTANCE.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) { + RTKAutopilotLocationBean current = (RTKAutopilotLocationBean) locationToUpdate; + if (mClient != null) { + mClient.updateRTKAutoPilotLocation(current); + } + } + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapInfoWindowAdapter.java b/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapInfoWindowAdapter.java new file mode 100644 index 0000000000..680dbc3eee --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapInfoWindowAdapter.java @@ -0,0 +1,44 @@ +package com.mogo.map.marker; + +import android.view.View; + +import com.mogo.map.AMapMarkerClickHandler; +import com.zhidaoauto.map.sdk.open.abs.marker.InfoWindowAdapter; +import com.zhidaoauto.map.sdk.open.marker.Marker; +import com.zhidaoauto.map.sdk.open.marker.OnInfoWindowClickListener; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author congtaowang + * @since 2019-12-24 + *

+ * 自定义infowindow + */ +public final class AMapInfoWindowAdapter implements InfoWindowAdapter, OnInfoWindowClickListener { + + public View getInfoWindow( Marker marker ) { + if ( marker.getMObject() instanceof IMogoMarker ) { + IMogoMarker mogoMarker = ( ( IMogoMarker ) marker.getMObject() ); + IMogoInfoWindowAdapter delegate = mogoMarker.getInfoWindowAdapter(); + if ( delegate != null ) { + final View infoView = delegate.getInfoWindow( mogoMarker ); + marker.setOnInfoWindowClickListener( this ); + return infoView; + } + } + return null; + } + + @Override + public void onInfoWindowClick( @NotNull Marker marker ) { + AMapMarkerClickHandler.getInstance().handleMarkerClicked( marker ); + } + + @Nullable + @Override + public View getInfoContents( @Nullable Marker marker ) { + return null; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapMarkerWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapMarkerWrapper.java new file mode 100644 index 0000000000..58b3d4783a --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/marker/AMapMarkerWrapper.java @@ -0,0 +1,595 @@ +package com.mogo.map.marker; + +import android.graphics.Bitmap; +import android.graphics.Point; +import android.text.TextUtils; +import android.view.View; +import android.view.animation.Interpolator; + +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.marker.anim.OnMarkerAnimationListener; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.abs.marker.MarkerAnimationListener; +import com.zhidaoauto.map.sdk.open.marker.Animation; +import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptor; +import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory; +import com.zhidaoauto.map.sdk.open.marker.Marker; +import com.zhidaoauto.map.sdk.open.marker.MarkerOptions; +import com.zhidaoauto.map.sdk.open.marker.MarkerScaleAnimation; +import com.zhidaoauto.map.sdk.open.marker.MarkerTranslateAnimation; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.tools.MapTools; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Observable; +import java.util.Observer; + +/** + * @author congtaowang + * @since 2019-12-18 + *

+ * 自研marker + */ +public class AMapMarkerWrapper implements IMogoMarker, Observer { + + private final String TAG = AMapMarkerWrapper.class.getName(); + + private Marker mMarker; + private Object mObject; + private IMogoMarkerClickListener mMogoMarkerClickListener; + private IMogoInfoWindowAdapter mMogoInfoWindowAdapter; + + private boolean mIsDestroy = false; + + private MogoMarkerOptions mMogoMarkerOptions; + private String mOwner; + + public AMapMarkerWrapper( Marker marker, MogoMarkerOptions mogoMarkerOptions ) { + this.mMarker = marker; + if ( marker != null ) { + // 设置自研 marker 的object对象为 IMogoMarker 实例。!!!! + marker.setMObject( this ); + if ( !TextUtils.isEmpty( mogoMarkerOptions.getAnchorColor() ) ) { + marker.setAnchorColor( mogoMarkerOptions.getAnchorColor() ); + } + MarkerWrapperClickHelper.getInstance().setMogoMarkerMap( marker.getId(), this ); + } + setObject( mogoMarkerOptions.getObject() ); + this.mMogoMarkerOptions = mogoMarkerOptions; + mMogoMarkerOptions.addObserver( this ); + } + + @Override + public void update( Observable o, Object arg ) { + if ( isDestroyed() ) { + return; + } + setMarkerOptions( mMogoMarkerOptions ); + } + + @Override + public void destroy() { + if ( mMogoMarkerOptions != null ) { + mMogoMarkerOptions.deleteObservers(); + mMogoMarkerOptions = null; + } + if ( mMarker != null ) { + mMarker.remove(); + mMarker.setMObject( null ); + mMarker.setOnInfoWindowClickListener( null ); + mMarker = null; + } + mMogoInfoWindowAdapter = null; + mMogoMarkerClickListener = null; + mObject = null; + mIsDestroy = true; + } + + @Override + public void remove() { + destroy(); + } + + @Override + public void hideInfoWindow() { + if ( mMarker != null ) { + mMarker.hideInfoWindow(); + } + } + + @Override + public void setAlpha( float alpha ) { + if ( mMarker != null ) { + mMarker.setAlpha( alpha ); + } + } + + @Override + public void setAnchor( float anchorU, float anchorV ) { + if ( mMarker != null ) { + mMarker.setAnchor( anchorU, anchorV ); + } + } + + @Override + public void setDraggable( boolean paramBoolean ) { + if ( mMarker != null ) { + mMarker.setDraggable( paramBoolean ); + } + } + + @Override + public void setIcon( Bitmap icon ) { + if ( icon == null || icon.isRecycled() ) { + return; + } + if ( mMarker != null ) { + mMarker.setIcon( icon ); + } + } + + @Override + public void setIcons( ArrayList< Bitmap > icons ) { + if ( icons == null || icons.isEmpty() ) { + return; + } + ArrayList< BitmapDescriptor > descriptors = new ArrayList<>(); + for ( Bitmap icon : icons ) { + if ( icon == null || icon.isRecycled() ) { + continue; + } + descriptors.add( BitmapDescriptorFactory.INSTANCE.fromBitmap( icon ) ); + } + if ( descriptors.isEmpty() ) { + return; + } + if ( mMarker != null ) { + mMarker.setIcons( descriptors ); + } + } + + @Override + public void setInfoWindowEnable( boolean enabled ) { + if ( mMarker != null ) { + if ( enabled ) { + mMarker.showInfoWindow(); + } else { + mMarker.hideInfoWindow(); + } + } + } + + @Override + public void setMarkerOptions( MogoMarkerOptions opt ) { + + final MarkerOptions options = ObjectUtils.fromMogo( opt ); + if ( options == null ) { + return; + } + if ( mMarker != null ) { + mMarker.setMarkerOptions( options ); + setObject( opt.getObject() ); + } + } + + @Override + public void setObject( Object object ) { + mObject = object; + } + + @Override + public Object getObject() { + return mObject; + } + + @Override + public void setPeriod( int period ) { + if ( mMarker != null ) { + mMarker.setPeriod( period ); + } + } + + @Override + public void setPosition( double lat, double lng ) { + if ( mMarker != null ) { + mMarker.setPosition( new LonLatPoint( lng, lat ) ); + } + } + + @Override + public MogoLatLng getPosition() { + if ( mMarker != null ) { + final LonLatPoint latLng = mMarker.getPosition(); + return ObjectUtils.fromAMap( latLng ); + } + return null; + } + + @Override + public void setRotateAngle( float rotate ) { + if ( mMarker != null ) { + mMarker.setRotateAngle( rotate ); + } + } + + @Override + public void setSnippet( String snippet ) { + if ( mMarker != null ) { + mMarker.setSnippet( snippet ); + } + } + + @Override + public void setTitle( String title ) { + if ( mMarker != null ) { + mMarker.setTitle( title ); + } + } + + @Override + public void setToTop() { + if ( mMarker != null ) { + mMarker.setToTop(); + } + } + + @Override + public void setVisible( boolean visible ) { + if ( mMarker != null ) { + mMarker.setVisible( visible ); + } + } + + @Override + public void setZIndex( int zIndex ) { + if ( mMarker != null ) { + mMarker.setZIndex( zIndex ); + } + } + + @Override + public void showInfoWindow() { + if ( mMarker != null ) { + mMarker.showInfoWindow(); + } + } + + @Override + public String getMarkerAssInfo() { + if ( mMarker != null ) { + return mMarker.getMarkeOptions().getAssInfo(); + } + return null; + } + + @Override + public void setOnMarkerClickListener( IMogoMarkerClickListener listener ) { + mMogoMarkerClickListener = listener; + } + + @Override + public IMogoMarkerClickListener getOnMarkerClickListener() { + return mMogoMarkerClickListener; + } + + @Override + public void setInfoWindowAdapter( IMogoInfoWindowAdapter adapter ) { + mMogoInfoWindowAdapter = adapter; + } + + @Override + public IMogoInfoWindowAdapter getInfoWindowAdapter() { + return mMogoInfoWindowAdapter; + } + + @Override + public void setMarkerIconView( IMogoMarkerIconViewCreator creator ) { + if ( creator != null ) { + View iconView = creator.createView( this ); + if ( iconView != null ) { + mMarker.setIcon( iconView ); + } + } + } + + @Override + public boolean isDestroyed() { + return mIsDestroy; + } + + @Override + public void setOwner( String mOwner ) { + this.mOwner = mOwner; + } + + @Override + public String getOwner() { + if ( mOwner != null ) { + return mOwner; + } + if ( mMogoMarkerOptions != null ) { + return mMogoMarkerOptions.getOwner(); + } + return null; + } + + @Override + public void setPositionByPixels( Point position ) { + if ( mMarker != null ) { + mMarker.setPosition( MapTools.INSTANCE.fromScreenLocation( position ) ); + } + } + + public Marker getMarker() { + return mMarker; + } + + @Override + public MogoMarkerOptions getMogoMarkerOptions() { + return mMogoMarkerOptions; + } + + @Override + public void startScaleAnimation( float fromX, float toX, float fromY, float toY, int duration, Interpolator interpolator ) { + if ( isDestroyed() ) { + return; + } + startScaleAnimation( fromX, toX, fromY, toY, duration, interpolator, null ); + } + + @Override + public void startScaleAnimation(float fromX, float toX, float fromY, float toY, int duration, Interpolator interpolator, final OnMarkerAnimationListener listener ) { + if ( isDestroyed() ) { + return; + } + + MarkerScaleAnimation animationScale = new MarkerScaleAnimation( fromX, toX ); + animationScale.setDuration( duration ); +// animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); +// animationScale.setInterpolator(interpolator); + animationScale.setAnimationListener( new MarkerAnimationListener() { + @Override + public void onAnimationEnd( @NotNull Animation animation ) { + if ( isDestroyed() ) { + return; + } + if ( listener != null ) { + listener.onAnimEnd(); + } + } + + @Override + public void onAnimationRepeat( @NotNull Animation animation ) { + + } + + @Override + public void onAnimationStart( @NotNull Animation animation ) { + if ( isDestroyed() ) { + return; + } + if ( listener != null ) { + listener.onAnimStart(); + } + } + } ); + + mMarker.setMarkerScaleAnimation( animationScale ); + mMarker.startAnimation(); + } + + @Override + public void startJumpAnimation(float high, long duration, Interpolator interpolator, final OnMarkerAnimationListener listener ) { + if ( isDestroyed() || high <= 0.0f || interpolator == null || duration < 0 ) { + return; + } + try { + final LonLatPoint latLng = ObjectUtils.fromMogo( getPosition() ); +// Point point = AMapWrapper.getAMap().getProjection().toScreenLocation(latLng); +// point.y -= WindowUtils.dip2px(AbsMogoApplication.getApp(), high); +// LatLng target = AMapWrapper.getAMap().getProjection().fromScreenLocation(point); + //使用TranslateAnimation,填写一个需要移动的目标点 + MarkerTranslateAnimation animation = new MarkerTranslateAnimation( latLng ); +// animation.setInterpolator(interpolator); + animation.setAnimationListener( new MarkerAnimationListener() { + @Override + public void onAnimationEnd( @NotNull Animation animation ) { + if ( isDestroyed() ) { + return; + } + if ( listener != null ) { + listener.onAnimEnd(); + } + } + + @Override + public void onAnimationRepeat( @NotNull Animation animation ) { + + } + + @Override + public void onAnimationStart( @NotNull Animation animation ) { + if ( isDestroyed() ) { + return; + } + if ( listener != null ) { + listener.onAnimStart(); + } + } + } ); + //整个移动所需要的时间 + animation.setDuration( duration * 1000 ); + //设置动画 + mMarker.setTranslateAnimation( animation ); + mMarker.startAnimation(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } + + @Override + public void setClickable( boolean clickable ) { + if ( mMarker != null ) { + mMarker.setClickable( clickable ); + } + } + + @Override + public void startSmooth( List< MogoLatLng > points, int duration ) { + startSmoothInMs( points, duration * 1000 ); + } + + @Override + public void startSmoothInMs( List< MogoLatLng > points, long duration ) { + if ( isDestroyed() ) { + return; + } + + if ( mMarker == null ) { + return; + } + + if ( points == null || points.isEmpty() ) { + return; + } + + ArrayList< LonLatPoint > newPoints = new ArrayList<>(); + for ( int i = 0; i < points.size(); i++ ) { + LonLatPoint point = ObjectUtils.fromMogo( points.get( i ) ); + if ( point == null ) { + continue; + } + newPoints.add( point ); + } + if ( newPoints.isEmpty() ) { + return; + } + + mMarker.startSmooth( newPoints, ( int ) duration ); + } + + @Override + public void startScaleAnimationWithAlpha( float fromX, float toX, float fromY, float toY, float fromAlpha, float toAlpha, int duration, Interpolator interpolator, OnMarkerAnimationListener listener ) { + + } + + @Override + public boolean isInfoWindowShowing() { + return mMarker.isInfoWindowShown(); + } + + @Override + public void setGps( boolean isGps ) { + if ( mMarker != null ) { + mMarker.setGps( isGps ); + } + } + + @Override + public String use3DResource( int model3D ) { + try { + mMarker.marker3DIcon( model3D ); + return mMarker.getMarkeOptions().getMarkerIconName(); + } catch ( Exception e ) { + Logger.e( TAG, e, "use3DResource" ); + } + return null; + } + + @Override + public void use3DResource( String resName ) { + try { + mMarker.getMarkeOptions().setVrIcon( true ); + mMarker.setMarkerOptions( mMarker.getMarkeOptions().setMarkerIconName( resName ) ); + } catch ( Exception e ) { + Logger.e( TAG, e, "use3DResource" ); + } + } + + @Override + public void use2DResource( String resName ) { + try { + mMarker.getMarkeOptions().setVrIcon( false ); + mMarker.setMarkerOptions( mMarker.getMarkeOptions().setMarkerIconName( resName ) ); + } catch ( Exception e ) { + Logger.e( TAG, e, "use3DResource" ); + } + } + + private String mLastAnchorColor = ""; + + @Override + public void setAnchorColor( String anchorColor ) { + if ( TextUtils.equals( mLastAnchorColor, anchorColor ) ) { + return; + } + if (mMogoMarkerOptions != null) { + mMogoMarkerOptions.anchorColor( anchorColor ); + } + + if (mMarker != null) { + mMarker.setAnchorColor( anchorColor ); + } + mLastAnchorColor = anchorColor; + } + + @Override + public void updateInfoWindowView( View view ) { + try { + mMarker.setInfoWindowView( view ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + + @Override + public void updateInfoWindowView( String viewResName ) { + try { + mMarker.setMarkerInfoName( viewResName ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + + @Override + public void setInfoWindowOffset( int offsetX, int offsetY ) { + try { + mMarker.setInfoWindowOffset( offsetX, offsetY ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + + @Override + public void addDynamicAnchorPosition( MogoLatLng latLng, float angle, long duration ) { + mMarker.addDynamicAnchorPostion( new LonLatPoint( latLng.lon, latLng.lat, angle ), System.currentTimeMillis(), ( int ) duration); + } + + @Override + public String getMarkerResName() { + if ( mMarker != null ) { + try { + return mMarker.getMarkeOptions().getMarkerIconName(); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + return ""; + } + + @Override + public String getMarkerInfoResName() { + if ( mMarker != null ) { + try { + return mMarker.getMarkeOptions().getMarkerInfoName(); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + return ""; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/marker/MarkerWrapperClickHelper.java b/libraries/mogo-map/src/main/java/com/mogo/map/marker/MarkerWrapperClickHelper.java new file mode 100644 index 0000000000..a4e47349f3 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/marker/MarkerWrapperClickHelper.java @@ -0,0 +1,41 @@ +package com.mogo.map.marker; + +import java.util.HashMap; +import java.util.Map; + +public class MarkerWrapperClickHelper { + + private volatile static MarkerWrapperClickHelper markerWrapperClickHelper; + + private final Map mogoMarkerMap = new HashMap<>(); + + private MarkerWrapperClickHelper(){ + + } + + public void setMogoMarkerMap(String id,IMogoMarker iMogoMarker){ + if(isStaticMarker(id)){ + return; + } + this.mogoMarkerMap.put(id,iMogoMarker); + } + + public Map getMogoMarkerMap() { + return mogoMarkerMap; + } + + public static MarkerWrapperClickHelper getInstance(){ + if (markerWrapperClickHelper == null) { + synchronized (MarkerWrapperClickHelper.class) { + if (markerWrapperClickHelper == null) { + markerWrapperClickHelper = new MarkerWrapperClickHelper(); + } + } + } + return markerWrapperClickHelper; + } + + public boolean isStaticMarker(String id){ + return id.contains("traffic"); + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/AMapPolylineWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/AMapPolylineWrapper.java new file mode 100644 index 0000000000..df69003403 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/AMapPolylineWrapper.java @@ -0,0 +1,195 @@ +package com.mogo.map.overlay; + + +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.poyline.Polyline; +import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author congtaowang + * @since 2020-03-10 + *

+ * 描述 + */ +public class AMapPolylineWrapper implements IMogoPolyline { + + private Polyline mPolyline; + private MogoPolylineOptions mOptions; + private boolean mIsDestroyed = false; + + public AMapPolylineWrapper( Polyline mPolyline, + MogoPolylineOptions mOptions ) { + this.mPolyline = mPolyline; + this.mOptions = mOptions; + } + + @Override + public void destroy() { + remove(); + } + + @Override + public void remove() { + if ( mPolyline != null ) { + mPolyline.remove(); + } + mIsDestroyed = true; + } + + @Override + public String getId() { + if ( mPolyline != null ) { + return mPolyline.getId(); + } + return null; + } + + @Override + public void setPoints( List< MogoLatLng > lonLats ) { + if ( lonLats == null || lonLats.isEmpty() ) { + mPolyline.setPoints( new ArrayList() ); + return; + } + ArrayList< LonLatPoint > points = new ArrayList<>(); + for ( MogoLatLng lonLat : lonLats ) { + LonLatPoint latLng = ObjectUtils.fromMogo( lonLat ); + if ( latLng == null ) { + continue; + } + points.add( latLng ); + } + mPolyline.setPoints( points ); + } + + @Override + public List< MogoLatLng > getPoints() { + if ( mPolyline == null ) { + return null; + } + ArrayList< MogoLatLng > lonLats = new ArrayList<>(); + List points = mPolyline.getPoints(); + if ( points != null ) { + for ( LonLatPoint latLng : points ) { + MogoLatLng lonLat = ObjectUtils.fromAMap( latLng ); + if ( lonLat == null ) { + continue; + } + lonLats.add( lonLat ); + } + } + return lonLats; + } + + @Override + public void setGeodesic( boolean draw ) { + if ( mPolyline != null ) { + mPolyline.setGeodesic( draw ); + } + } + + @Override + public boolean isGeodesic() { + return mPolyline == null ? false : mPolyline.isGeodesic(); + } + + @Override + public void setDottedLine( boolean dottedLine ) { + if ( mPolyline != null ) { + mPolyline.setDottedLine( dottedLine ); + } + } + + @Override + public boolean isDottedLine() { + return mPolyline == null ? false : mPolyline.isDottedLine(); + } + + @Override + public void setWidth( float width ) { + if ( mPolyline != null ) { + mPolyline.setWidth( width ); + } + } + + @Override + public float getWidth() { + if ( mPolyline != null ) { + return mPolyline.getWidth(); + } + return 0; + } + + @Override + public void setColor( int color ) { + if ( mPolyline != null ) { + mPolyline.setColor( color ); + } + } + + @Override + public int getColor() { + if ( mPolyline != null ) { + return mPolyline.getColor(); + } + return 0; + } + + @Override + public void setZIndex( float zIndex ) { + if ( mPolyline != null ) { + mPolyline.setZIndex( zIndex ); + } + } + + @Override + public float getZIndex() { + if ( mPolyline != null ) { + return mPolyline.getZIndex(); + } + return 0; + } + + @Override + public void setVisible( boolean visible ) { + if ( mPolyline != null ) { + mPolyline.setVisible( visible ); + } + } + + @Override + public boolean isVisible() { + if ( mPolyline != null ) { + return mPolyline.isVisible(); + } + return false; + } + + @Override + public void setTransparency( float transparency ) { + if ( mPolyline != null ) { + mPolyline.setTransparency( transparency ); + } + } + + @Override + public void setOption( MogoPolylineOptions option ) { + PolylineOptions target = ObjectUtils.fromMogo( option ); + if ( target == null ) { + return; + } + mOptions = option; + if ( mPolyline != null ) { + mPolyline.setOption( target ); + } + } + + @Override + public boolean isDestroyed() { + return false; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/search/GeocodeSearchClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/search/GeocodeSearchClient.java new file mode 100644 index 0000000000..b1e86482f0 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/search/GeocodeSearchClient.java @@ -0,0 +1,109 @@ +package com.mogo.map.search; + +import android.content.Context; + +import com.mogo.map.exception.MogoMapException; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.search.geo.IMogoGeoSearchListener; +import com.mogo.map.search.geo.MogoGeocodeAddress; +import com.mogo.map.search.geo.MogoRegeocodeAddress; +import com.mogo.map.search.geo.query.MogoGeocodeQuery; +import com.mogo.map.search.geo.query.MogoRegeocodeQuery; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.query.GeocodeAddress; +import com.zhidaoauto.map.sdk.open.query.GeocodeResult; +import com.zhidaoauto.map.sdk.open.query.GeocodeSearch; +import com.zhidaoauto.map.sdk.open.query.OnGeocodeSearchListener; +import com.zhidaoauto.map.sdk.open.query.RegeocodeAddress; +import com.zhidaoauto.map.sdk.open.query.RegeocodeResult; +import com.zhidaoauto.map.sdk.open.query.RegeocodeQuery; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author congtaowang + * @since 2019-12-19 + *

+ * 地理编码/逆地理编码自研实现 + */ +public class GeocodeSearchClient implements IMogoGeoSearch, OnGeocodeSearchListener { + + private GeocodeSearch mClient; + private IMogoGeoSearchListener mListener; + + public GeocodeSearchClient( Context context ) { + mClient = new GeocodeSearch( context ); + mClient.setOnGeocodeSearchListener( this ); + } + + @Override + public void setGeoSearchListener( IMogoGeoSearchListener listener ) { + mListener = listener; + } + + @Override + public MogoRegeocodeAddress getFromLocation( MogoRegeocodeQuery query ) throws MogoMapException { + try { + RegeocodeQuery regeocodeQuery = ObjectUtils.fromMogo(query); + RegeocodeAddress regeocodeAddress = mClient.getFromLocation(regeocodeQuery); + return ObjectUtils.fromAMap( regeocodeAddress ); + } catch ( Exception e ) { + throw new MogoMapException( e ); + } + } + + @Override + public List< MogoGeocodeAddress > getFromLocationName( MogoGeocodeQuery query ) throws MogoMapException { + try { + List geocodeAddress = mClient.getFromLocationName( ObjectUtils.fromMogo( query ) ); + if ( geocodeAddress != null ) { + List< MogoGeocodeAddress > mogoGeocodeAddresses = new ArrayList<>(); + for ( GeocodeAddress address : geocodeAddress ) { + MogoGeocodeAddress mogoGeocodeAddress = ObjectUtils.fromAMap( address ); + if ( mogoGeocodeAddress != null ) { + mogoGeocodeAddresses.add( mogoGeocodeAddress ); + } + } + return mogoGeocodeAddresses; + } + return new ArrayList<>(); + } catch ( Exception e ) { + throw new MogoMapException( e ); + } + } + + @Override + public void getFromLocationAsyn( MogoRegeocodeQuery query ) { + if ( mClient != null ) { + mClient.getFromLocationAsyn( ObjectUtils.fromMogo( query ) ); + } + } + + @Override + public void getFromLocationNameAsyn( MogoGeocodeQuery query ) { + if ( mClient != null ) { + mClient.getFromLocationNameAsyn( ObjectUtils.fromMogo( query ) ); + } + } + + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i ) { + if ( mListener != null ) { + mListener.onRegeocodeSearched( ObjectUtils.fromAMap( regeocodeResult ) ); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i ) { + if ( mListener != null ) { + mListener.onGeocodeSearched( ObjectUtils.fromAMap( geocodeResult ) ); + } + } + + @Override + public void destroy() { + mClient = null; + mListener = null; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/search/InputtipsSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/search/InputtipsSearch.java new file mode 100644 index 0000000000..07084ebddc --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/search/InputtipsSearch.java @@ -0,0 +1,87 @@ +package com.mogo.map.search; + +import android.content.Context; + +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.search.inputtips.IMogoInputtipsListener; +import com.mogo.map.search.inputtips.IMogoInputtipsSearch; +import com.mogo.map.search.inputtips.MogoTip; +import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.query.Inputtips; +import com.zhidaoauto.map.sdk.open.query.InputtipsListener; +import com.zhidaoauto.map.sdk.open.query.InputtipsQuery; +import com.zhidaoauto.map.sdk.open.query.Tip; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author congtaowang + * @since 2019-12-20 + *

+ * 自研地图 inputtips搜索实现 + */ +public class InputtipsSearch implements IMogoInputtipsSearch, InputtipsListener { + + private static final String TAG = "InputtipsSearch"; + + private Inputtips mClient; + private InputtipsQuery mQuery; + private IMogoInputtipsListener mListener; + + public InputtipsSearch(Context context, MogoInputtipsQuery query) { + mQuery = ObjectUtils.fromMogo(query); + mClient = new Inputtips(context, mQuery); + mClient.setInputtipsListener(this); + } + + @Override + public void setQuery(MogoInputtipsQuery query) { + this.mQuery = ObjectUtils.fromMogo(query); + } + + @Override + public void setInputtipsListener(IMogoInputtipsListener listener) { + this.mListener = listener; + } + + @Override + public void requestInputtipsAsyn() { + if (mClient != null) { + mClient.requestInputtipsAsyn(); + } + } + + @Override + public void onGetInputtips(List list, int i) { + if (i == 0) { + if (mListener != null) { + mListener.onGetInputtips(getResult(list)); + } + } else { + Logger.e(TAG, "errorcode = " + i); + } + } + + private List getResult(List tips) { + List mogoTips = new ArrayList<>(); + if (tips != null) { + //只添加有坐标的结果 + for (Tip tip : tips) { + MogoTip mogoTip = ObjectUtils.fromAMap(tip); + if (mogoTip != null && mogoTip.getPoint() != null) { + mogoTips.add(mogoTip); + } + } + } + return mogoTips; + } + + @Override + public void destroy() { + mClient = null; + mListener = null; + mQuery = null; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/search/PoiSearchClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/search/PoiSearchClient.java new file mode 100644 index 0000000000..8c3971f6ad --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/search/PoiSearchClient.java @@ -0,0 +1,142 @@ +package com.mogo.map.search; + +import android.content.Context; + +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.map.exception.MogoMapException; +import com.mogo.map.search.geo.MogoPoiItem; +import com.mogo.map.search.poisearch.IMogoPoiSearch; +import com.mogo.map.search.poisearch.IMogoPoiSearchListener; +import com.mogo.map.search.poisearch.MogoPoiResult; +import com.mogo.map.search.poisearch.MogoSearchBound; +import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; +import com.mogo.map.utils.ObjectUtils; +import com.zhidaoauto.map.sdk.open.query.OnPoiSearchListener; +import com.zhidaoauto.map.sdk.open.query.PoiItem; +import com.zhidaoauto.map.sdk.open.query.PoiSearch; +import com.zhidaoauto.map.sdk.open.query.PoiSearchResult; + +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +/** + * @author congtaowang + * @since 2019-12-24 + *

+ * poi搜索自研实现 + *

+ * 错误码对照表:https://lbs.amap.com/api/android-sdk/guide/map-tools/error-code + */ +public class PoiSearchClient implements IMogoPoiSearch, OnPoiSearchListener { + + private static final String TAG = "PoiSearchClient"; + + private MogoPoiSearchQuery mQuery; + private PoiSearch mClient; + private IMogoPoiSearchListener mListener; + private MogoSearchBound mBound; + + public PoiSearchClient( Context context, MogoPoiSearchQuery query ) { + try { + mQuery = query; + mClient = new PoiSearch( context, ObjectUtils.fromMogo( mQuery ) ); + mClient.setOnPoiSearchListener( this ); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void setPoiSearchListener( IMogoPoiSearchListener listener ) { + mListener = listener; + } + + @Override + public void searchPOIAsyn() { + if ( mClient != null ) { + mClient.searchPOIAsyn(); + } + } + + @Override + public MogoPoiResult searchPOI() throws MogoMapException { + if ( mClient != null ) { + try { + PoiSearchResult search = mClient.searchPOI(); + return ObjectUtils.fromAMap( search ); + } catch ( Exception e ) { + throw new MogoMapException( e ); + } + } + return null; + } + + @Override + public void setQuery( MogoPoiSearchQuery query ) { + mQuery = query; + if ( mClient != null ) { + mClient.setQuery( ObjectUtils.fromMogo( mQuery ) ); + } + } + + @Override + public MogoPoiItem searchPOIId( String poiId ) throws MogoMapException { + if ( mClient != null ) { + try { + PoiItem poiItem = mClient.searchPOIId( poiId ); + return ObjectUtils.fromAMap( poiItem ); + } catch ( Exception e ) { + throw new MogoMapException( e ); + } + } + return null; + } + + @Override + public void searchPOIIdAsyn( String poiId ) { + if ( mClient != null ) { + mClient.searchPOIIdAsyn( poiId ); + } + } + + @Override + public void setBound( MogoSearchBound bound ) { + mBound = bound; + if ( mClient != null ) { + mClient.setBound( ObjectUtils.fromMogo( mBound ) ); + } + } + + @Override + public void onPoiSearched( PoiSearchResult poiResult, int errorCode ) { + if ( errorCode != 0 ) { + Logger.e( TAG, "errorcode is %d", errorCode ); + } + if ( mListener != null ) { + mListener.onPoiSearched( ObjectUtils.fromAMap( poiResult ), errorCode ); + } + } + + @Override + public void onPoiItemSearched( PoiItem poiItem, int errorCode ) { + if ( errorCode != 0 ) { + Logger.e( TAG, "errorcode is %d", errorCode ); + } + if ( mListener != null ) { + mListener.onPoiItemSearched( ObjectUtils.fromAMap( poiItem ), errorCode ); + } + } + + @Override + public void destroy() { + mQuery = null; + mClient = null; + mListener = null; + mBound = null; + } + + @Override + public void onPoiCategorySearched(@Nullable List list, int errorCode) { + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java new file mode 100644 index 0000000000..bc67adf11f --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -0,0 +1,386 @@ +package com.mogo.map.uicontroller; + +import android.graphics.Point; +import android.graphics.Rect; +import android.location.Location; +import android.view.View; + +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.zhidaoauto.map.sdk.open.MapAutoApi; + +import org.json.JSONObject; + +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author congtaowang + * @since 2019-12-26 + *

+ * 描述 + */ +public class AMapUIController implements IMogoMapUIController { + + private static final String TAG = "AMapUIController"; + + private static volatile AMapUIController sInstance; + + private IMogoMapUIController mClient; + + private AMapUIController() { + } + + public static AMapUIController getInstance() { + if (sInstance == null) { + synchronized (AMapUIController.class) { + if (sInstance == null) { + sInstance = new AMapUIController(); + } + } + } + return sInstance; + } + + public void initClient(IMogoMapUIController client) { + this.mClient = client; + } + + public synchronized void release() { + sInstance = null; + } + + @Override + public void setTrafficEnabled(boolean visible) { + if (mClient != null) { + mClient.setTrafficEnabled(visible); + } + } + + @Override + public MapControlResult changeZoom(boolean zoom) { + if (mClient != null) { + return mClient.changeZoom(zoom); + } + return MapControlResult.ERROR; + } + + @Override + public MapControlResult changeZoom(float zoom) { + if (mClient != null) { + return mClient.changeZoom(zoom); + } + return MapControlResult.ERROR; + } + + @Override + public void changeMapMode(EnumMapUI mode) { + if (mClient != null) { + mClient.changeMapMode(mode); + } + } + + @Override + public void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng) { + if (mClient != null) { + mClient.changeMapVisualAngle(angelMode, mogoLatLng); + } + } + + @Override + public VisualAngleMode getCurrentMapVisualAngle() { + if (mClient != null) { + return mClient.getCurrentMapVisualAngle(); + } + return null; + } + + @Override + public void moveToCenter(MogoLatLng latLng, boolean animate) { + if (mClient != null) { + mClient.moveToCenter(latLng, animate); + } + } + + @Override + public void showMyLocation(boolean visible) { + if (mClient != null) { + mClient.showMyLocation(visible); + } + } + + @Override + public void showMyLocation(View view) { + if (mClient != null) { + mClient.showMyLocation(view); + } + } + + @Override + public void recoverLockMode() { + if (mClient != null) { + mClient.recoverLockMode(); + } + } + + @Override + public void loseLockMode() { + if (mClient != null) { + mClient.loseLockMode(); + } + } + + @Override + public void setLockZoom(int var1) { + if (mClient != null) { + mClient.setLockZoom(var1); + } + } + + @Override + public void displayOverview(Rect bounds) { + if (mClient != null) { + mClient.displayOverview(bounds); + } + } + + @Override + public float getScalePerPixel() { + if (mClient != null) { + return mClient.getScalePerPixel(); + } + return 0; + } + + @Override + public float getZoomLevel() { + if (mClient != null) { + return mClient.getZoomLevel(); + } + return 0; + } + + @Override + public float getRoadWidth(double lon, double lat, float angle, boolean isGpsLocation, boolean isRTK) { + if (mClient != null) { + return mClient.getRoadWidth(lon, lat, angle, isGpsLocation, isRTK); + } + return 0; + } + + @Override + public MogoLatLng getCameraNorthEastPosition() { + if (mClient != null) { + return mClient.getCameraNorthEastPosition(); + } + return null; + } + + @Override + public MogoLatLng getCameraSouthWestPosition() { + if (mClient != null) { + return mClient.getCameraSouthWestPosition(); + } + return null; + } + + @Override + public MogoLatLng getWindowCenterLocation() { + if (mClient != null) { + return mClient.getWindowCenterLocation(); + } + return null; + } + + @Override + public void setPointToCenter(double mapCenterX, double mapCenterY) { + if (mClient != null) { + mClient.setPointToCenter(mapCenterX, mapCenterY); + } + } + + @Override + public Point getLocationPointInScreen(MogoLatLng latLng) { + if (mClient != null) { + return mClient.getLocationPointInScreen(latLng); + } + return null; + } + + @Override + public MogoLatLng getLocationMogoLatLngInScreen(Point point) { + if (mClient != null) { + return mClient.getLocationMogoLatLngInScreen(point); + } + return null; + } + + + @Override + public void setRenderFps(int fps) { + if (mClient != null) { + mClient.setRenderFps(fps); + } + } + + @Override + public void showBounds(String tag, MogoLatLng carPosition, List lonLats, Rect bound, boolean lockCarPosition) { + if (mClient != null) { + mClient.showBounds(tag, carPosition, lonLats, bound, lockCarPosition); + } + } + + @Override + public void forceRender() { + if (mClient != null) { + mClient.forceRender(); + } + } + + @Override + public float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception { + if (mClient != null) { + return mClient.calculateLineDistance(p1, p2); + } + return 0; + } + + @Override + public EnumMapUI getCurrentUiMode() { + if (mClient != null) { + return mClient.getCurrentUiMode(); + } + return null; + } + + @Override + public void changeMyLocation(Location location) { + if (mClient != null) { + mClient.changeMyLocation(location); + } + } + + @Override + public boolean isCarLocked() { + if (mClient != null) { + return mClient.isCarLocked(); + } + return false; + } + + @Override + public void setCarCursorOption(CarCursorOption option) { + if (mClient != null) { + mClient.setCarCursorOption(option); + } + } + + @Override + public MapCameraPosition getMapCameraPosition() { + if (mClient != null) { + return mClient.getMapCameraPosition(); + } + return null; + } + + @Override + public void changeBearing(float bearing) { + if (mClient != null) { + mClient.changeBearing(bearing); + } + } + + @Override + public void changeMapViewAngle(int type) { + if (mClient != null) { + mClient.changeMapViewAngle(type); + } + } + + @Override + public void changeCurrentIcon(int iconId) { + if (mClient != null) { + mClient.changeCurrentIcon(iconId); + } + } + + @Override + public long getTileId(double lon, double lat) { + return MapAutoApi.INSTANCE.getTileID(lon, lat, 13); // 13为默认获取瓦片层级级别 + } + + @Override + public int getSpeedLimmit(double lon, double lat, float angle) { + return mClient.getSpeedLimmit(lon, lat, angle); + } + + @Override + public void emphasizeMyLocation() { + + } + + @Override + public void rtkEnable(boolean enable) { + if (mClient != null) { + mClient.rtkEnable(enable); + } + } + + @Override + public void syncLocation2Map(JSONObject data) { + if (mClient != null) { + mClient.syncLocation2Map(data); + } + } + + @Override + public void syncLocation2Map(MessagePad.GnssInfo gnssInfo) { + if (mClient != null) { + mClient.syncLocation2Map(gnssInfo); + } + } + + @Override + public void openVrMode(boolean zoomGestureEnable) { + if (mClient != null) { + mClient.openVrMode(zoomGestureEnable); + } + } + + @Override + public double[] matchRoad(String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK) { + if (mClient != null) { + return mClient.matchRoad(id, lon, lat, angle, isGpsLocation, isRTK); + } + return null; + } + + @Override + public String getMarkerInfoResName(String speedVal) { + if (mClient != null) { + return mClient.getMarkerInfoResName(speedVal); + } + return null; + } + + @Override + public void setMarkerInfoResName(String speedVal, String val) { + if (mClient != null) { + mClient.setMarkerInfoResName(speedVal, val); + } + } + + @Override + public void clearRoadCacheById(String id) { + if (mClient != null) { + mClient.clearRoadCacheById(id); + } + } + + @Override + public void setMapDAngle(float angle) { + if (mClient != null) { + mClient.setMapDAngle(angle); + } + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/MogoMapUtils.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/MogoMapUtils.java new file mode 100644 index 0000000000..2c351ff7d3 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/MogoMapUtils.java @@ -0,0 +1,135 @@ +package com.mogo.map.utils; + +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.exception.MogoMapException; +import com.zhidaoauto.map.sdk.open.camera.LatLngBounds; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; + +import java.util.List; + +/** + * @author congtaowang + * @since 2020-03-04 + *

+ * 地图工具类 + */ +public class MogoMapUtils { + + private static final String TAG = "MogoMapUtils"; + + public static LatLngBounds getLatLngBounds(MogoLatLng carPosition, List< MogoLatLng > lonLats, boolean lockCarPosition ) throws Exception { + + if ( lonLats == null || lonLats.isEmpty() ) { + throw new MogoMapException( "经纬度不能为null或空集合" ); + } + LatLngBounds.Builder builder = new LatLngBounds.Builder(); + for ( MogoLatLng lonLat : lonLats ) { + builder.include( ObjectUtils.fromMogo( lonLat ) ); + } + if ( carPosition != null && !lockCarPosition ) { + builder.include( ObjectUtils.fromMogo( carPosition ) ); + } + LatLngBounds latLngBounds = builder.build(); + if ( !lockCarPosition ) { + return latLngBounds; + } + + if ( carPosition == null ) { + throw new MogoMapException( "自车位置经纬度信息不能为空" ); + } + + if ( latLngBounds.getNortheast() == null && latLngBounds.getSouthwest() == null ) { + return null; + } + + double south = 0.0; + double west = 0.0; + + double east = 0.0; + double north = 0.0; + + double dLat = 0.0; + double dLon = 0.0; + + if ( latLngBounds.getNortheast() == null ) { + dLat = Math.abs( carPosition.lat - latLngBounds.getSouthwest().getLatitude() ); + dLon = Math.abs( carPosition.lon - latLngBounds.getSouthwest().getLongitude() ); + } else if ( latLngBounds.getSouthwest() == null ) { + dLat = Math.abs( carPosition.lat - latLngBounds.getNortheast().getLatitude() ); + dLon = Math.abs( carPosition.lon - latLngBounds.getNortheast().getLongitude() ); + } else { + final double dLat1 = Math.abs( carPosition.lat - latLngBounds.getSouthwest().getLatitude() ); + final double dLon1 = Math.abs( carPosition.lon - latLngBounds.getSouthwest().getLongitude() ); + final double dLat2 = Math.abs( carPosition.lat - latLngBounds.getNortheast().getLatitude() ); + final double dLon2 = Math.abs( carPosition.lon - latLngBounds.getNortheast().getLongitude() ); + dLat = dLat1 > dLat2 ? dLat1 : dLat2; + dLon = dLon1 > dLon2 ? dLon1 : dLon2; + } + + west = carPosition.lat - dLat; + south = carPosition.lon + dLon; + + east = carPosition.lat + dLat; + north = carPosition.lon - dLon; + + if ( south == 0.0 || west == 0.0 || east == 0.0 || north == 0.0 ) { + return null; + } + + if ( east < west ) { + double tmp = east; + east = west; + west = tmp; + } + + if( north < south ){ + double tmp = north; + north = south; + south = tmp; + } + + return new LatLngBounds.Builder().include( new LonLatPoint( east, north ) ).include( new LonLatPoint( west, south ) ).build(); + } + + public static float calculateLineDistance(LonLatPoint var0, LonLatPoint var1) { + if (var0 != null && var1 != null) { + try { + double var2 = var0.getLongitude(); + double var4 = var0.getLatitude(); + double var6 = var1.getLongitude(); + double var8 = var1.getLatitude(); + var2 *= 0.01745329251994329D; + var4 *= 0.01745329251994329D; + var6 *= 0.01745329251994329D; + var8 *= 0.01745329251994329D; + double var10 = Math.sin(var2); + double var12 = Math.sin(var4); + double var14 = Math.cos(var2); + double var16 = Math.cos(var4); + double var18 = Math.sin(var6); + double var20 = Math.sin(var8); + double var22 = Math.cos(var6); + double var24 = Math.cos(var8); + double[] var28 = new double[3]; + double[] var29 = new double[3]; + var28[0] = var16 * var14; + var28[1] = var16 * var10; + var28[2] = var12; + var29[0] = var24 * var22; + var29[1] = var24 * var18; + var29[2] = var20; + return (float)(Math.asin(Math.sqrt((var28[0] - var29[0]) * (var28[0] - var29[0]) + (var28[1] - var29[1]) * (var28[1] - var29[1]) + (var28[2] - var29[2]) * (var28[2] - var29[2])) / 2.0D) * 1.27420015798544E7D); + } catch (Throwable var26) { + var26.printStackTrace(); + return 0.0F; + } + } else { + try { + throw new Exception("非法坐标值"); + } catch (Exception var27) { + var27.printStackTrace(); + return 0.0F; + } + } + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java new file mode 100644 index 0000000000..71037e76d5 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java @@ -0,0 +1,707 @@ +package com.mogo.map.utils; + +import android.graphics.Bitmap; +import android.graphics.Color; +import android.text.TextUtils; +import android.view.View; + +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.data.traffic.TrafficData; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.overlay.MogoPolylineOptions; +import com.mogo.map.search.geo.MogoGeocodeAddress; +import com.mogo.map.search.geo.MogoGeocodeResult; +import com.mogo.map.search.geo.MogoPoiItem; +import com.mogo.map.search.geo.MogoRegeocodeAddress; +import com.mogo.map.search.geo.MogoRegeocodeResult; +import com.mogo.map.search.geo.query.MogoGeocodeQuery; +import com.mogo.map.search.geo.query.MogoRegeocodeQuery; +import com.mogo.map.search.inputtips.MogoTip; +import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; +import com.mogo.map.search.poisearch.MogoPoiResult; +import com.mogo.map.search.poisearch.MogoSearchBound; +import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; +import com.mogo.map.uicontroller.MapCameraPosition; +import com.zhidaoauto.map.sdk.open.camera.CameraPosition; +import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptor; +import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory; +import com.zhidaoauto.map.sdk.open.marker.MarkerOptions; +import com.zhidaoauto.map.sdk.open.marker.MarkerSimpleData; +import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions; +import com.zhidaoauto.map.sdk.open.query.GeocodeAddress; +import com.zhidaoauto.map.sdk.open.query.GeocodeQuery; +import com.zhidaoauto.map.sdk.open.query.GeocodeResult; +import com.zhidaoauto.map.sdk.open.query.InputtipsQuery; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.query.PoiItem; +import com.zhidaoauto.map.sdk.open.query.PoiSearchItem; +import com.zhidaoauto.map.sdk.open.query.PoiSearchResult; +import com.zhidaoauto.map.sdk.open.query.Query; +import com.zhidaoauto.map.sdk.open.query.RegeocodeAddress; +import com.zhidaoauto.map.sdk.open.query.RegeocodeQuery; +import com.zhidaoauto.map.sdk.open.query.RegeocodeResult; +import com.zhidaoauto.map.sdk.open.query.SearchBound; +import com.zhidaoauto.map.sdk.open.query.Tip; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author congtaowang + * @since 2019-12-18 + *

+ * 业务对象和实际对象转换 + */ +public class ObjectUtils { + + public static MarkerOptions fromMogo(MogoMarkerOptions opt) { + + if (opt == null) { + return null; + } + ArrayList descriptors = new ArrayList<>(); + final ArrayList icons = opt.getIcons(); + if (icons != null && !icons.isEmpty()) { + for (Bitmap icon : icons) { + if (icon == null || icon.isRecycled()) { + continue; + } + descriptors.add(new BitmapDescriptor(icon)); + } + } + + MarkerOptions markerOptions = new MarkerOptions() + .setGps(opt.isGps()) + .position(new LonLatPoint(opt.getLongitude(), opt.getLatitude())) + .anchor(opt.getU(), opt.getV()) + .icons(descriptors) + .period(opt.getPeriod()) + .controlAngle(opt.isControlAngle()) + .rotateAngle(opt.getRotate()) + .setFlat(opt.isFlat()) + .visible(opt.isVisible()) + .infoWindowEnable(opt.isInifoWindowEnable()) + .scale(opt.getScale()) + .alpha(opt.getAlpha()) + .setInfoWindowOffset(opt.getOffsetX(), opt.getOffsetY()) + .zIndex(opt.getzIndex()); + + try { + if (!TextUtils.isEmpty(opt.getAnchorColor())) { + Color.parseColor(opt.getAnchorColor()); + markerOptions.anchorColor(opt.getAnchorColor()); + } + } catch (Exception e) { + //e.printStackTrace(); + } + markerOptions.vrEnable(opt.is3DMode()); + if (!TextUtils.isEmpty(opt.getResName())) { + markerOptions.setMarkerIconName(opt.getResName()); + } else { + BitmapDescriptor descriptor = getBitmapDescriptorFromMogo(opt); + if (descriptor != null) { + markerOptions.markerIcon(descriptor); + } + if (opt.getIcon3DRes() != 0) { + markerOptions.marker3DIcon(opt.getIcon3DRes()); + } + } + if (!TextUtils.isEmpty(opt.getTitle())) { + markerOptions.title(opt.getTitle()); + } + if (!TextUtils.isEmpty(opt.getSnippet())) { + markerOptions.snippet(opt.getSnippet()); + } + return markerOptions; + } + + public static MarkerSimpleData fromTrafficData(MessagePad.TrackedObject trafficData) { + if (trafficData == null) { + return null; + } + MarkerSimpleData markerOptions = null; + try { + markerOptions = new MarkerSimpleData(); + markerOptions.setId(trafficData.getUuid()); + markerOptions.setMarkerType(trafficData.getType()); + markerOptions.setRotateAngle((float) trafficData.getHeading()); + markerOptions.setLat(trafficData.getLatitude()); + markerOptions.setLon(trafficData.getLongitude()); + } catch (Exception e) { + e.printStackTrace(); + } + return markerOptions; + } + + private static BitmapDescriptor getBitmapDescriptorFromMogo(MogoMarkerOptions options) { + if (options == null) { + return null; + } + Bitmap icon = options.getIcon(); + if (icon != null) { + return BitmapDescriptorFactory.INSTANCE.fromBitmap(icon); + } + View view = options.getIconView(); + if (view != null) { + return BitmapDescriptorFactory.INSTANCE.fromView(view); + } + return null; + } + + + public static MogoLocation fromLocation(com.zhidaoauto.map.sdk.open.location.MogoLocation aLocation) { + if (aLocation == null) { + return null; + } + MogoLocation location = new MogoLocation(); + location.setLocType(1); // 定位类型 + location.setSatellite(4); + location.setSpeed(aLocation.getSpeed()); + location.setLatitude(aLocation.getLat()); + location.setLongitude(aLocation.getLon()); + location.setAltitude(aLocation.getAltitude()); + location.setBearing((float) aLocation.getHeading()); + location.setCityCode(aLocation.getCityCode()); + location.setCityName(aLocation.getCity()); + location.setProvider(aLocation.getProvider()); + location.setAddress(aLocation.getAddress()); + location.setDistrict(aLocation.getDistrict()); + location.setProvince(aLocation.getProvince()); + location.setAdCode(aLocation.getAdCode()); + // location.setAccuracy( aLocation.getAccuracy() ); + // location.setTime( aLocation.getTime() ); +// location.setLocationDetail( aLocation.getLocationDetail() ); +// location.setPoiName( aLocation.getPoiName() ); +// location.setAoiName( aLocation.getAoiName() ); +// location.setErrCode( aLocation.getErrorCode() ); +// location.setErrInfo( aLocation.getErrorInfo() ); +// location.setStreetNum( aLocation.getStreetNum() ); +// location.setDescription( aLocation.getDescription() ); +// location.setBuildingId( aLocation.getBuildingId() ); +// location.setFloor( aLocation.getFloor() ); +// location.setGpsAccuracyStatus( aLocation.getGpsAccuracyStatus() ); + return location; + } + + public static LonLatPoint fromMogo(MogoLatLng latLng) { + if (latLng == null) { + return null; + } + return new LonLatPoint(latLng.lon, latLng.lat); + } + +// public static NaviLatLng fromMogoAsNavi( MogoLatLng latLng ) { +// if ( latLng == null ) { +// return null; +// } +// return new NaviLatLng( latLng.lat, latLng.lng ); +// } + +// public static LatLng fromMogo2( MogoLatLng latLng ) { +// if ( latLng == null ) { +// return null; +// } +// return new LatLng( latLng.lat, latLng.lng ); +// } + + public static MogoLatLng fromAMap(LonLatPoint point) { + if (point == null) { + return null; + } + return new MogoLatLng(point.getLatitude(), point.getLongitude()); + } + +// public static MogoLatLng CameraPositionfromAMap( LatLng point ) { +// if ( point == null ) { +// return null; +// } +// return new MogoLatLng( point.latitude, point.longitude ); +// } + + public static GeocodeQuery fromMogo(MogoGeocodeQuery query) { + if (query == null) { + return null; + } + GeocodeQuery q = new GeocodeQuery(query.getLocationName(), query.getCity()); + return q; + } + + public static RegeocodeQuery fromMogo(MogoRegeocodeQuery query) { + if (query == null) { + return null; + } + RegeocodeQuery q = new RegeocodeQuery(fromMogo(query.getPoint()), 1000); + return q; + } + +// public static MogoAoiItem fromAMap( AoiItem amapItem ) { +// if ( amapItem == null ) { +// return null; +// } +// MogoAoiItem mogoAoiItem = new MogoAoiItem(); +// mogoAoiItem.setAdCode( amapItem.getAdCode() ); +// mogoAoiItem.setAoiArea( amapItem.getAoiArea() ); +// mogoAoiItem.setAoiCenterPoint( fromAMap( amapItem.getAoiCenterPoint() ) ); +// mogoAoiItem.setAoiId( amapItem.getAoiId() ); +// mogoAoiItem.setAoiName( amapItem.getAoiName() ); +// return mogoAoiItem; +// } +// +// public static MogoBusinessArea fromAMap( BusinessArea amapItem ) { +// if ( amapItem == null ) { +// return null; +// } +// MogoBusinessArea mogoBusinessArea = new MogoBusinessArea(); +// mogoBusinessArea.setCenterPoint( fromAMap( amapItem.getCenterPoint() ) ); +// mogoBusinessArea.setName( amapItem.getName() ); +// return mogoBusinessArea; +// } +// +// +// public static MogoCrossroad fromAMap( Crossroad amapItem ) { +// if ( amapItem == null ) { +// return null; +// } +// MogoCrossroad mogoCrossroad = new MogoCrossroad(); +// mogoCrossroad.setDirection( amapItem.getDirection() ); +// mogoCrossroad.setDistance( amapItem.getDistance() ); +// mogoCrossroad.setFirstRoadId( amapItem.getFirstRoadId() ); +// mogoCrossroad.setFirstRoadName( amapItem.getFirstRoadName() ); +// mogoCrossroad.setSecondRoadId( amapItem.getSecondRoadId() ); +// mogoCrossroad.setSecondRoadName( amapItem.getSecondRoadName() ); +// return mogoCrossroad; +// } + + public static MogoGeocodeAddress fromAMap(GeocodeAddress address) { + if (address == null) { + return null; + } + MogoGeocodeAddress mogoGeocodeAddress = new MogoGeocodeAddress(); + mogoGeocodeAddress.setAdcode(address.getAdcode()); + mogoGeocodeAddress.setBuilding(address.getBuilding()); + mogoGeocodeAddress.setCity(address.getCity()); + mogoGeocodeAddress.setDistrict(address.getDistrict()); + mogoGeocodeAddress.setFormatAddress(address.getFormatAddress()); + mogoGeocodeAddress.setLatlng(fromAMap(address.getLonlat())); + mogoGeocodeAddress.setLevel(address.getLevel()); + mogoGeocodeAddress.setNeighborhood(address.getNeighborhood()); + mogoGeocodeAddress.setProvince(address.getProvince()); + mogoGeocodeAddress.setTownship(address.getTownship()); + return mogoGeocodeAddress; + } + + public static MogoGeocodeResult fromAMap(GeocodeResult result) { + if (result == null || result.getGeocodeAddressList() == null) { + return null; + } + MogoGeocodeResult mogoGeocodeResult = new MogoGeocodeResult(); + final List addresses = new ArrayList<>(); + List list = result.getGeocodeAddressList(); + for (GeocodeAddress geocodeAddress : list) { + final MogoGeocodeAddress mogoGeocodeAddress = fromAMap(geocodeAddress); + if (mogoGeocodeAddress != null) { + addresses.add(mogoGeocodeAddress); + } + } + + mogoGeocodeResult.setAddresses(addresses); + return mogoGeocodeResult; + } + +// public static MogoIndoorData fromAMap( IndoorData data ) { +// if ( data == null ) { +// return null; +// } +// MogoIndoorData mogoIndoorData = new MogoIndoorData(); +// mogoIndoorData.setFloor( data.getFloor() ); +// mogoIndoorData.setFloorName( data.getFloorName() ); +// mogoIndoorData.setPoiId( data.getPoiId() ); +// return mogoIndoorData; +// } +// +// public static MogoPhoto fromAMap( Photo photo ) { +// if ( photo == null ) {f +// return null; +// } +// MogoPhoto mogoPhoto = new MogoPhoto(); +// mogoPhoto.setTitle( photo.getTitle() ); +// mogoPhoto.setUrl( photo.getUrl() ); +// return mogoPhoto; +// } +// +// public static MogoPoiItemExtension fromAMap( PoiItemExtension poiItemExtension ) { +// if ( poiItemExtension == null ) { +// return null; +// } +// MogoPoiItemExtension mogoPoiItemExtension = new MogoPoiItemExtension(); +// mogoPoiItemExtension.setOpentime( poiItemExtension.getOpentime() ); +// mogoPoiItemExtension.setRating( poiItemExtension.getmRating() ); +// return mogoPoiItemExtension; +// } +// +// public static MogoRegeocodeRoad fromAMap( RegeocodeRoad regeocodeRoad ) { +// if ( regeocodeRoad == null ) { +// return null; +// } +// MogoRegeocodeRoad mogoRegeocodeRoad = new MogoRegeocodeRoad(); +// mogoRegeocodeRoad.setDirection( regeocodeRoad.getDirection() ); +// mogoRegeocodeRoad.setDistance( regeocodeRoad.getDistance() ); +// mogoRegeocodeRoad.setId( regeocodeRoad.getId() ); +// mogoRegeocodeRoad.setName( regeocodeRoad.getName() ); +// mogoRegeocodeRoad.setPoint( fromAMap( regeocodeRoad.getLatLngPoint() ) ); +// return mogoRegeocodeRoad; +// } +// +// public static MogoStreetNumber fromAMap( StreetNumber streetNumber ) { +// if ( streetNumber == null ) { +// return null; +// } +// MogoStreetNumber mogoStreetNumber = new MogoStreetNumber(); +// mogoStreetNumber.setDirection( streetNumber.getDirection() ); +// mogoStreetNumber.setDistance( streetNumber.getDistance() ); +// mogoStreetNumber.setLatLonPoint( fromAMap( streetNumber.getLatLonPoint() ) ); +// mogoStreetNumber.setNumber( streetNumber.getNumber() ); +// mogoStreetNumber.setStreet( streetNumber.getStreet() ); +// return mogoStreetNumber; +// } + +// public static MogoSubPoiItem fromAMap( SubPoiItem subPoiItem ) { +// if ( subPoiItem == null ) { +// return null; +// } +// MogoSubPoiItem mogoSubPoiItem = new MogoSubPoiItem(); +// mogoSubPoiItem.setDistance( subPoiItem.getDistance() ); +// mogoSubPoiItem.setPoiId( subPoiItem.getPoiId() ); +// mogoSubPoiItem.setPoint( fromAMap( subPoiItem.getLatLonPoint() ) ); +// mogoSubPoiItem.setSnippet( subPoiItem.getSnippet() ); +// mogoSubPoiItem.setSubName( mogoSubPoiItem.getSubName() ); +// mogoSubPoiItem.setSubTypeDes( mogoSubPoiItem.getSubTypeDes() ); +// mogoSubPoiItem.setTitle( mogoSubPoiItem.getTitle() ); +// return mogoSubPoiItem; +// } + + public static MogoPoiItem fromAMap(PoiItem poiItem) { + if (poiItem == null) { + return null; + } + MogoPoiItem mogoPoiItem = new MogoPoiItem(); + mogoPoiItem.setAdCode(poiItem.getAdCode()); + mogoPoiItem.setAdName(poiItem.getAdName()); + mogoPoiItem.setBusinessArea(poiItem.getBusinessArea()); + mogoPoiItem.setCityCode(poiItem.getCityCode()); + mogoPoiItem.setCityName(poiItem.getCityName()); + mogoPoiItem.setDirection(poiItem.getDirection()); + mogoPoiItem.setDistance(poiItem.getDistance()); + mogoPoiItem.setEmail(poiItem.getEmail()); + mogoPoiItem.setEnter(fromAMap(poiItem.getEnter())); + mogoPoiItem.setExit(fromAMap(poiItem.getExit())); +// mogoPoiItem.setIndoorData( fromAMap( poiItem.getIndoorData() ) ); + mogoPoiItem.setParkingType(poiItem.getParkingType()); +// mogoPoiItem.setIndoorMap( poiItem.isIndoorMap() ); +// if ( poiItem.getPhotos() != null ) { +// List< MogoPhoto > mogoPhotos = new ArrayList<>(); +// for ( Photo photo : poiItem.getPhotos() ) { +// MogoPhoto mogoPhoto = fromAMap( photo ); +// if ( mogoPhoto != null ) { +// mogoPhotos.add( mogoPhoto ); +// } +// } +// mogoPoiItem.setPhotos( mogoPhotos ); +// } +// mogoPoiItem.setPoiExtension( fromAMap( poiItem.getPoiExtension() ) ); + mogoPoiItem.setPoiId(poiItem.getPoiId()); + mogoPoiItem.setPoint(fromAMap(poiItem.getLonLatPoint())); + mogoPoiItem.setPostcode(poiItem.getPostcode()); + mogoPoiItem.setProvinceCode(poiItem.getProvinceCode()); + mogoPoiItem.setProvinceName(poiItem.getProvinceName()); + mogoPoiItem.setShopID(poiItem.getShopID()); + mogoPoiItem.setSnippet(poiItem.getSnippet()); +// if ( poiItem.getSubPois() != null ) { +// List< MogoSubPoiItem > mogoSubPoiItems = new ArrayList<>(); +// for ( SubPoiItem subPois : poiItem.getSubPois() ) { +// MogoSubPoiItem mogoSubPoiItem = fromAMap( subPois ); +// if ( mogoPoiItem != null ) { +// mogoSubPoiItems.add( mogoSubPoiItem ); +// } +// } +// mogoPoiItem.setSubPois( mogoSubPoiItems ); +// } + mogoPoiItem.setTel(poiItem.getTel()); + mogoPoiItem.setTypeCode(poiItem.getTypeCode()); + mogoPoiItem.setTitle(poiItem.getTitle()); + mogoPoiItem.setTypeDes(poiItem.getTypeDes()); + mogoPoiItem.setWebsite(poiItem.getWebsite()); + return mogoPoiItem; + } + + public static MogoRegeocodeAddress fromAMap(RegeocodeAddress regeocodeAddress) { + if (regeocodeAddress == null) { + return null; + } + MogoRegeocodeAddress mogoRegeocodeAddress = new MogoRegeocodeAddress(); + mogoRegeocodeAddress.setAdCode(regeocodeAddress.getAdCode()); +// if ( regeocodeAddress.getAois() != null ) { +// List< MogoAoiItem > items = new ArrayList<>(); +// for ( AoiItem aois : regeocodeAddress.getAois() ) { +// final MogoAoiItem mogoAoiItem = fromAMap( aois ); +// if ( mogoAoiItem != null ) { +// items.add( mogoAoiItem ); +// } +// } +// mogoRegeocodeAddress.setAois( items ); +// } + + mogoRegeocodeAddress.setBuilding(regeocodeAddress.getBuilding()); +// if ( regeocodeAddress.getBusinessAreas() != null ) { +// List< MogoBusinessArea > mogoBusinessAreas = new ArrayList<>(); +// for ( BusinessArea businessArea : regeocodeAddress.getBusinessAreas() ) { +// MogoBusinessArea mogoBusinessArea = fromAMap( businessArea ); +// if ( mogoBusinessArea != null ) { +// mogoBusinessAreas.add( mogoBusinessArea ); +// } +// } +// mogoRegeocodeAddress.setBusinessAreas( mogoBusinessAreas ); +// } + + mogoRegeocodeAddress.setCity(regeocodeAddress.getCity()); + mogoRegeocodeAddress.setCityCode(regeocodeAddress.getCityCode()); + mogoRegeocodeAddress.setCountry(regeocodeAddress.getCountry()); +// if ( regeocodeAddress.getCrossroads() != null ) { +// List< MogoCrossroad > mogoCrossroads = new ArrayList<>(); +// for ( Crossroad crossroad : regeocodeAddress.getCrossroads() ) { +// +// MogoCrossroad mogoCrossroad = fromAMap( crossroad ); +// if ( mogoCrossroad != null ) { +// mogoCrossroads.add( mogoCrossroad ); +// } +// } +// mogoRegeocodeAddress.setCrossroads( mogoCrossroads ); +// } + mogoRegeocodeAddress.setDistrict(regeocodeAddress.getDistrict()); + mogoRegeocodeAddress.setFormatAddress(regeocodeAddress.getFormatAddress()); + mogoRegeocodeAddress.setNeighborhood(regeocodeAddress.getNeighborhood()); + if (regeocodeAddress.getPoiList() != null) { + List mogoPoiItems = new ArrayList<>(); + List list = regeocodeAddress.getPoiList(); + for (PoiItem pois : list) { + MogoPoiItem mogoPoiItem = fromAMap(pois); + mogoPoiItems.add(mogoPoiItem); + } + mogoRegeocodeAddress.setPois(mogoPoiItems); + } + mogoRegeocodeAddress.setProvince(regeocodeAddress.getProvince()); +// if ( regeocodeAddress.getRoads() != null ) { +// List< MogoRegeocodeRoad > mogoRegeocodeRoads = new ArrayList<>(); +// for ( RegeocodeRoad road : regeocodeAddress.getRoads() ) { +// MogoRegeocodeRoad mogoRegeocodeRoad = fromAMap( road ); +// if ( mogoRegeocodeRoad != null ) { +// mogoRegeocodeRoads.add( mogoRegeocodeRoad ); +// } +// } +// mogoRegeocodeAddress.setRoads( mogoRegeocodeRoads ); +// } +// mogoRegeocodeAddress.setStreetNumber( fromAMap( regeocodeAddress.getStreetNumber() ) ); + mogoRegeocodeAddress.setTowncode(regeocodeAddress.getTowncode()); + mogoRegeocodeAddress.setTownship(regeocodeAddress.getTownship()); + return mogoRegeocodeAddress; + } + + public static MogoRegeocodeResult fromAMap(RegeocodeResult regeocodeResult) { + if (regeocodeResult == null) { + return null; + } + MogoRegeocodeResult mogoRegeocodeResult = new MogoRegeocodeResult(); + mogoRegeocodeResult.setRegeocodeAddress(fromAMap(regeocodeResult.getRegeocodeAddress())); + return mogoRegeocodeResult; + } + + public static InputtipsQuery fromMogo(MogoInputtipsQuery query) { + if (query == null) { + return null; + } + InputtipsQuery inputtipsQuery = new InputtipsQuery(query.getKeyword(), query.getCity()); + inputtipsQuery.setCityLimit(query.isCityLimit()); + inputtipsQuery.setLocation(fromMogo(query.getLocation())); + inputtipsQuery.setType(query.getType()); + return inputtipsQuery; + } + + public static MogoTip fromAMap(Tip tip) { + if (tip == null) { + return null; + } + MogoTip mogoTip = new MogoTip(); + mogoTip.setAdCode(tip.getAdcode()); + mogoTip.setAddress(tip.getAddress()); + mogoTip.setDistrict(tip.getDistrict()); + mogoTip.setName(tip.getName()); + mogoTip.setPoiID(tip.getPoiID()); + mogoTip.setPoint(fromAMap(tip.getLatPoint())); + mogoTip.setTypeCode(tip.getTypeCode()); + return mogoTip; + } + +// public static MogoPoi fromAMap( Poi poi ) { +// if ( poi == null ) { +// return null; +// } +// MogoPoi mogoPoi = new MogoPoi(); +// mogoPoi.setCoordinate( fromAMap( poi.getCoordinate() ) ); +// mogoPoi.setName( poi.getName() ); +// mogoPoi.setPoiId( poi.getPoiId() ); +// return mogoPoi; +// } + + public static MogoPoiSearchQuery fromAMap(Query query) { + if (query == null) { + return null; + } + MogoPoiSearchQuery mogoPoiSearchQuery = new MogoPoiSearchQuery(query.getKeyword(), query.getCategory(), query.getCity()); +// mogoPoiSearchQuery.setBuilding( query.getBuilding() ); + mogoPoiSearchQuery.setCityLimit(query.getCityLimit()); + mogoPoiSearchQuery.setDistanceSort(query.getDistanceSort()); + mogoPoiSearchQuery.setLocation(fromAMap(query.getLocation())); + mogoPoiSearchQuery.setPageNum(query.getPageNum()); + mogoPoiSearchQuery.setPageSize(query.getPageSize()); + return mogoPoiSearchQuery; + } + + public static Query fromMogo(MogoPoiSearchQuery query) { + if (query == null || query.getQuery() == null) { + return null; + } + Query psq = new Query(query.getQuery(), "", ""); + String category = getCategory(query.getQuery()); + if (!category.equals("")) + psq = new Query("", "", getCategory(query.getQuery())); +// psq.setBuilding( query.getBuilding() ); + psq.setCityLimit(query.isCityLimit()); + psq.setDistanceSort(query.isDistanceSort()); + psq.setLocation(fromMogo(query.getLocation())); + psq.setPageNum(query.getPageNum()); + psq.setPageSize(query.getPageSize()); + return psq; + } + + public static MogoSearchBound fromAMap(SearchBound bound) { + if (bound == null) { + return null; + } + if (bound.getShape() == SearchBound.BOUND_SHAPE) { + return new MogoSearchBound(fromAMap(bound.getCenter()), bound.getRange(), bound.isDistanceSort()); + } else if (bound.getShape() == SearchBound.POLYGON_SHAPE) { + return new MogoSearchBound(fromAMap(bound.getPolyGonList())); + } else if (bound.getShape() == SearchBound.RECTANGLE_SHAPE) { + return new MogoSearchBound(fromAMap(bound.getLowerLeft()), fromAMap(bound.getUpperRight())); + } + return null; + } + + public static List fromAMap(List latLngs) { + if (latLngs == null) { + return null; + } + List result = new ArrayList<>(latLngs.size()); + for (LonLatPoint latLng : latLngs) { + result.add(fromAMap(latLng)); + } + return result; + } + + public static List fromMogo(List latLngs) { + if (latLngs == null) { + return null; + } + List result = new ArrayList<>(latLngs.size()); + for (MogoLatLng latLng : latLngs) { + result.add(fromMogo(latLng)); + } + return result; + } + + + public static SearchBound fromMogo(MogoSearchBound bound) { + if (bound == null) { + return null; + } + if (bound.getShape() == MogoSearchBound.SHAPE_BOUND) { + return new SearchBound(fromMogo(bound.getCenterPoint()), bound.getRadiusInMeters(), bound.isDistanceSort()); + } else if (bound.getShape() == MogoSearchBound.SHAPE_POLYGON) { + return new SearchBound(fromMogo(bound.getPolyGonList())); + } else if (bound.getShape() == MogoSearchBound.SHAPE_RECTANGLE) { + return new SearchBound(fromMogo(bound.getLowerLeft()), fromMogo(bound.getUpperRight())); + } + return null; + } + + public static MogoPoiResult fromAMap(PoiSearchResult result) { + if (result == null) { + return null; + } + MogoPoiResult mogoPoiResult = new MogoPoiResult(); + if (result.getItems() != null) { + final List poiItems = result.getItems(); + final ArrayList mogoPoiItems = new ArrayList<>(poiItems.size()); + for (PoiSearchItem poiItem : poiItems) { + mogoPoiItems.add(fromAMap(poiItem.getPoi())); + } + mogoPoiResult.setPois(mogoPoiItems); + } + return mogoPoiResult; + } + + public static PolylineOptions fromMogo(MogoPolylineOptions options) { + if (options == null) { + return null; + } + PolylineOptions target = new PolylineOptions(); + target.setGps(options.gps()); + if (options.getPoints() != null) { + List points = new ArrayList<>(); + for (MogoLatLng point : options.getPoints()) { + points.add(fromMogo(point)); + } + target.lonLatPoints(points); + } + target.setLineWidth(options.getWidth()); + target.zIndex(options.getZIndex()); + target.setColor(options.getColor()); + target.useGradient(options.isGradient()); + if (options.getColorValues() != null) { + target.colorValues(options.getColorValues()); + } +// target.transparency( options.getTransparency() ); +// target.aboveMaskLayer( options.isAboveMaskLayer() ); +// target.lineCapType( PolylineOptions.LineCapType.LineCapRound ); +// target.lineJoinType( PolylineOptions.LineJoinType.LineJoinRound ); +// target.setDottedLineType( PolylineOptions.DOTTEDLINE_TYPE_CIRCLE ); + return target; + } + + + public static MapCameraPosition fromAMap(CameraPosition position) { + if (position == null) { + return null; + } + return new MapCameraPosition(fromAMap(position.getTarget()), position.getBearing(), position.getTilt(), position.getZoom()); + } + + private static String getCategory(String key) { + String category = ""; + if (key.equals("加油站")) { + category = "6"; + } else if (key.equals("停车场")) { + category = "12"; + } else if (key.equals("餐馆")) { + category = "22"; + } else if (key.equals("洗车")) { + category = "8"; + } else if (key.equals("厕所")) { + + } + return category; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/PointInterpolatorUtil.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/PointInterpolatorUtil.java new file mode 100644 index 0000000000..f4013e949e --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/PointInterpolatorUtil.java @@ -0,0 +1,138 @@ +package com.mogo.map.utils; + +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; + +import java.util.List; + +/** + * 点之间插值工具类 + * + * @author tongchenfei + */ +public class PointInterpolatorUtil { + private static final String TAG = "PointInterpolatorUtil"; + private static final int DISTANCE_THRESHOLD = 2; + + /** + * 在(x1,y1) (x2,y2)中间插入一些点,使每两个点之间距离<={@link #DISTANCE_THRESHOLD},利用如下公式进行计算 + * xn = x1 + (x2 - x1)*n/a + * yn = y1 + (y2 - y1)*n/a + * a = (distance/{@link #DISTANCE_THRESHOLD}) +1 + * n in 1 .. a-1 + * n == 0 时,xn = x1 + * n == a 时,xn = x2 + *

+ * 将xn依次插入x1到x2之间 + * + * @param points 待插值点集 + * @deprecated 这个方法有问题,并不能算出来想要的值 + */ + @Deprecated + public static void interpolate(List points) { + if (points.size() >= 2) { + // 插值 + for (int i = 0; i < points.size() - 1; i++) { + MogoLatLng current = points.get(i); + MogoLatLng next = points.get(i + 1); + float distance = CoordinateUtils.calculateLineDistance(current.lon, current.lat, next.lon, next.lat); + Logger.d(TAG, i + ": " + distance); + if (distance > DISTANCE_THRESHOLD) { + int inter = (int) (distance / DISTANCE_THRESHOLD) + 1; + for (int j = 1; j < inter; j++) { + double newLat = current.lat + (next.lat - current.lat) * j / inter; + double newLon = current.lon + (next.lon - current.lon) * j / inter; + Logger.d(TAG, "distance: " + distance + ", j: " + j + ", nextLat: " + next.lat + ", nextLon: " + next.lon + ", newLat: " + newLat + ", newLon: " + newLon); + points.add(i + 1, new MogoLatLng(newLat, newLon)); + current = points.get(++i); + } + } + } + + } + } + + /** + * 道路吸附算法 + *

+ * 所谓的道路数据,实际就是道路对应的点集,每两个点之间是直线,但是两点间距并不固定,点集内点的数量也不固定,点集是有序的,按道路方向排序,road[0]是起点。 + * 为了避免拐弯道路的问题,先使用{@link #getCloseTwoPoint(int, int, double, double, List)}从道路数据里面找出距离目标点最近的两个点,记为A、B,最近的两个点就在目标点一前一后排列, + * 这样的话,求一下目标点到AB的垂直映射以及距离{@link #getFootAndMinDistance(double, double, double, double, double, double)},就是吸附后的经纬度和距离 + * + * @param lon 目标经度 + * @param lat 目标纬度 + * @param road 目标道路数据 + * @return double[]{吸附后的经度,吸附后的纬度,目标经纬度距离道路的垂直距离} + */ + public static double[] mergeToRoad(double lon, double lat, List road) { + int closeStart = 0; + int closeEnd = road.size() - 1; + int[] result = getCloseTwoPoint(closeStart, closeEnd, lon, lat, road); + LonLatPoint start = road.get(result[0]); + LonLatPoint end = road.get(result[1]); + return getFootAndMinDistance(lon, lat, start.getLongitude(), start.getLatitude(), end.getLongitude(), end.getLatitude()); + } + + /** + * 获取距离目标点经纬度最近的道路点index + *

+ * 采用二分查找思想,先用道路数据的起点和终点分别计算距离目标点的距离: + * 若起点距离较远,则说明目标点在整条道路的后半段,则将起点后移至原起点和终点的中间,继续递归计算; + * 同理,若终点距离较远,则目标点在前半段,则终点前移,继续递归计算; + * 递归结束条件是起点index和终点index间隔是1; + * + * @param closeStart 距离目标点最近的起始点index + * @param closeEnd 距离目标点最近的终点index + * @param lon 目标点经度 + * @param lat 目标点纬度 + * @param road 目标道路 + * @return int[]{距离目标点最近的起始点index,距离目标点最近的终点index} + */ + private static int[] getCloseTwoPoint(int closeStart, int closeEnd, double lon, double lat, List road) { + if (closeEnd - closeStart == 1) { + return new int[]{closeStart, closeEnd}; + } + LonLatPoint start = road.get(closeStart); + LonLatPoint end = road.get(closeEnd); + float startDistance = CoordinateUtils.calculateLineDistance(start.getLongitude(), start.getLatitude(), lon, lat); + float endDistance = CoordinateUtils.calculateLineDistance(end.getLongitude(), end.getLatitude(), lon, lat); + if (startDistance > endDistance) { + closeStart += (closeEnd - closeStart) / 2; + } else { + closeEnd -= (closeEnd - closeStart) / 2; + } + return getCloseTwoPoint(closeStart, closeEnd, lon, lat, road); + } + + /** + * 计算垂足以及最短距离 + * + * @param x target point lon + * @param y target point lat + * @param x1 线段起点 lon + * @param y1 起点起点 lat + * @param x2 线段终点 lon + * @param y2 线段终点 lat + * @return double[]{footLon,footLat,minDistance} if(footLon == -1) => no foot or foot not in line + */ + private static double[] getFootAndMinDistance(double x, double y, double x1, double y1, double x2, double y2) { + double[] result = new double[]{-1, -1, -1}; + double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1); + if (cross < 0) { + // 垂足没有在线段内,所以也无需计算最短距离 + return result; + } + double d2 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + if (cross > d2) { + // 垂足没有在线段内,所以也无需计算最短距离 + return result; + } + double r = cross / d2; + result[0] = x1 + (x2 - x1) * r; + result[1] = y1 + (y2 - y1) * r; + result[2] = CoordinateUtils.calculateLineDistance(result[0], result[1], x, y); + return result; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ResIdCache.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ResIdCache.java new file mode 100644 index 0000000000..9737902bd7 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ResIdCache.java @@ -0,0 +1,23 @@ +package com.mogo.map.utils; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author congtaowang + * @since 2021/3/8 + * + * 描述 + */ +public class ResIdCache { + + public static Map< String, String > sMarkerCachesResMd5Values = new HashMap<>(); + + public static String getVal( String name ) { + return sMarkerCachesResMd5Values.get( name ); + } + + public static void putVal( String name, String val ) { + sMarkerCachesResMd5Values.put( name, val ); + } +} diff --git a/libraries/mogo-map/src/main/res/drawable/marker_blue.png b/libraries/mogo-map/src/main/res/drawable/marker_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..062dda4a33c4b756ba63a0a604ba43cadda260fd GIT binary patch literal 1972 zcmZWp30PBC7QSdH8pysv0;Cogie_a=$bb+?*a9(xMJmdc1QI0)gvW$M6aj;vkN_GH z*@h|%)uJHoXmLR+t>V&7$EkIuotchHYdbTxQ@;wC`*6ON`R07@-t+!*|NoqG-+TA9 zsFaCVj1L9?fK5)4si7yJW5sef2XpWl(7je7O_KsJ-oEvx^e%|mnk01^05yRC)Hed~ z!Ug?f04n(aJShM`(hUIJ+?hX<0Kl?ms?FB3ENv)BkBZ+mB3fuXV#Q% z4%0EmY`f{xGV9ZH-LGLL)OIzh^7tD{J1@UCINKRgG!T@tU)*vz(0P~Daog81$7;LD z+BM5;yymm*3Zv?Mn&o^Ta#px`loDM}jkCc{g3FHublhTfLh>!vo{yN#H<%6Ayz4GA ztQYC!=V)6_QFIgjMMwNqT_JgcIB^}*G|6n5W!i2qZ67e3uKUzq^{%}{ue?ArpQY+2 zDTQOCoMGa+UP^);cxMq3_RvkIylZC|)=Tt?3-q#cG~;Qi;RHo{jGXr_Y5gIBsvocD z#wF~<#qRME)#4J{Xr+@3>onamMKhkE>Q7KKW8_Vvq@2UVj6s6(AU4D~kS@G%y&a9%olj9C0elg&ty7?1SxW1o&X9wD*C$5*M&AaY|LCAmj3c`r%3<)fA z{0v{d{BZ;DnOlNg1Ixp{nqO2ePOfR9xPhKt1`K*2$!T(r&)i8A9t!T*RGGg&6hWZZKj zxP7|-;j-ngxxenQVkO4Y3kwA}Jb_3eQ>ZjL!`p|+0>IbLpZ&(FHv!qBkr2$48a^6MxNy*4IR8W%5z z*|m3{bAR`No`b!huYX|hw?pq7Iy^k`yU}-#90l)<9Xmcgaboi1snci9o;yDUE?j(n z`qJeqS7)wW|KP^#haZ8Px8`o&xqI*9Pk#UDAMXG0vj^bwhkyF>7hnG6uYddM?~fio zc?!4t^*7JH{q7(C{MYmEfB5&00BEMG`s#eWg5gRaBF{mzg@{g~vFM-!LcSn^!;j<$ zM45tciI6YhN37E+|F9A!W}t~P^_9jVi9}}BR2p?AL?Tf^Y6TFCxX$w+hrWcfSXv@U(iuwh z2nZ857c_Gqh4%lH^#(1Xhm7rWiGz^gy@ZiwFzS%%G96g#iC1PSiJ8boyIEQ(EfcbU zAe0|25(>pa{?p{PFCm4vBu|E+MhC*V0!18ccl|J2%w4jWrA`LLhEg5eK2L8p>d=Q^ zF`E%yg#lRvTwP&BwLxPxaZNger_q`?24l%DL5+!5VbSmef^c+1hI3(?xjm*2VHuDt LSIWlX3L5?cd8O$j literal 0 HcmV?d00001 diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/datacenter/SnapshotLocationDataCenter.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/datacenter/SnapshotLocationDataCenter.java index 7729e25c2d..73872605f5 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/datacenter/SnapshotLocationDataCenter.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/datacenter/SnapshotLocationDataCenter.java @@ -1,8 +1,12 @@ package com.mogo.module.common.datacenter; +import static com.mogo.eagle.core.data.config.FunctionBuildConfig.gpsProvider; + import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.map.MogoMapUIController; import com.mogo.module.common.MogoApisHandler; import com.mogo.service.cloud.location.CloudLocationInfo; @@ -95,21 +99,22 @@ public class SnapshotLocationDataCenter { DebugConfig.setStatusData(DebugConfig.sLat, lat); // 使用与渠道配置一样的gps提供者提供的数据 - CloudLocationInfo cloudLocationInfo = new CloudLocationInfo(); - cloudLocationInfo.setAlt(alt); - cloudLocationInfo.setHeading(heading); - cloudLocationInfo.setLat(lat); - cloudLocationInfo.setLon(lon); - cloudLocationInfo.setSpeed(speed); - cloudLocationInfo.setSatelliteTime(satelliteTime); - cloudLocationInfo.setSystemTime(systemTime); - cloudLocationInfo.setTileId(String.valueOf(MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getTileId(lon, lat))); - //todo list数据暂时无人使用,增加后会导致数据量缓慢增加 -// mMachineCacheList.add(cloudLocationInfo); + if (gpsProvider == FunctionBuildConfig.gpsProvider) { + CloudLocationInfo cloudLocationInfo = new CloudLocationInfo(); + cloudLocationInfo.setAlt(alt); + cloudLocationInfo.setHeading(heading); + cloudLocationInfo.setLat(lat); + cloudLocationInfo.setLon(lon); + cloudLocationInfo.setSpeed(speed); + cloudLocationInfo.setSatelliteTime(satelliteTime); + cloudLocationInfo.setSystemTime(systemTime); + cloudLocationInfo.setTileId(String.valueOf(MogoMapUIController.getInstance().getTileId(lon, lat))); + mMachineCacheList.add(cloudLocationInfo); - mCurLon = cloudLocationInfo.getLon(); - mCurLat = cloudLocationInfo.getLat(); - mSatelliteTime = cloudLocationInfo.getSatelliteTime(); + mCurLon = cloudLocationInfo.getLon(); + mCurLat = cloudLocationInfo.getLat(); + mSatelliteTime = cloudLocationInfo.getSatelliteTime(); + } } public double getCurLon() { diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java new file mode 100644 index 0000000000..0cf901e330 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java @@ -0,0 +1,348 @@ +package com.mogo.module.common.drawer; + +import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS; + +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; + +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.data.traffic.TrafficData; +import com.mogo.map.MogoMarkerManager; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.constants.DataTypes; +import com.mogo.module.common.utils.Trigonometric; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +/** + * @author congtaowang + * @since 2020/10/28 + *

+ * 绘制adas近景识别到的车辆 + */ +public class AdasRecognizedResultDrawer extends BaseDrawer { + + private static final String TAG = "AdasRecognizedResultDrawer"; + + private static volatile AdasRecognizedResultDrawer sInstance; + + /** + * 上一帧数据的缓存 + */ + private static Map mMarkersCaches = new ConcurrentHashMap<>(); + + public AdasRecognizedResultDrawer() { + super(); + } + + private final Map mLastPositions = new ConcurrentHashMap<>(); + + public static AdasRecognizedResultDrawer getInstance() { + if (sInstance == null) { + synchronized (AdasRecognizedResultDrawer.class) { + if (sInstance == null) { + sInstance = new AdasRecognizedResultDrawer(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + public boolean hasCached(String uniqueKey) { + return mMarkersCaches.containsKey(uniqueKey); + } + + /** + * 渲染 adas 识别的数据 + * + * @param resultList adas感知融合数据 + */ + public void renderAdasRecognizedResult(List resultList) { + + final long start = System.nanoTime(); + if (resultList == null || resultList.isEmpty() || !DebugConfig.isUseAdasRecognize()) { + clearOldMarker(); + Log.w("ADAS数据延时绘制", "resultList==>" + resultList + " DebugConfig.isUseAdasRecognize()==>" + DebugConfig.isUseAdasRecognize()); + return; + } + + if (!MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + clearOldMarker(); + Log.w("ADAS数据延时绘制", "当前不是VR模式"); + return; + } + +// List allDatumsList = new ArrayList<>(); +// prepareData(resultList, allDatumsList); + + Map newAdasRecognizedMarkersCaches = new ConcurrentHashMap<>(); + List newDiffSet = new ArrayList<>(); + for (TrafficData recognizedListResult : resultList) { + + if (isUselessValue(recognizedListResult)) { + continue; + } + // 复用之前存在的 marker + String uniqueKey = recognizedListResult.getUuid(); + IMogoMarker marker = mMarkersCaches.remove(uniqueKey); + if (marker != null && !marker.isDestroyed()) { +// Log.d(TAG, "发现缓存marker id : " + uniqueKey); + updateCacheMarkerRes(marker, recognizedListResult); + renderAdasOneFrame(marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches); + } else { + // 新增添加进差集 + newDiffSet.add(recognizedListResult); + } + } + removeUselessMarker(mMarkersCaches); + removeUselessLastRecord(); + int newDiffSetSize = newDiffSet.size(); +// Log.d(TAG, "原数据量 : " + resultList.size() + " 新增marker数量 : " + newDiffSetSize); + // 复用过期 marker + if (newDiffSetSize > 0) { + for (int i = 0; i < newDiffSetSize; i++) { + TrafficData recognizedListResult = newDiffSet.get(i); + String uniqueKey = recognizedListResult.getUuid(); + IMogoMarker marker = drawAdasRecognizedDataMarker(recognizedListResult); + if (marker == null) { + continue; + } +// Log.d(TAG, "新增marker id : " + uniqueKey); + renderAdasOneFrame(marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches); + } + } + sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches); + mMarkersCaches.clear(); + mMarkersCaches = newAdasRecognizedMarkersCaches; + Log.d("ADAS数据延时绘制", "render 接收数据 -> 处理结束 " + TimeUnit.NANOSECONDS.toMillis((System.nanoTime() - start)) + "ms"); + } + + /** + * 对数据补点 + * + * @param in + * @param out + */ + private void prepareData(List in, List out) { +// foreCastPoint(in); + out.addAll(in); + } + + private final static String FORECAST = "adasForecast"; + + /** + * 基于工控机识别的数据点速度预测当前位置和距离自车距离 + * + * @param in 数据源 + */ + private void foreCastPoint(List in) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + for (TrafficData adasResult : in) { + Log.d(FORECAST, "ready to foreCast current uuid : " + adasResult.getUuid()); + long internal = getCurSatelliteTime() - adasResult.getSatelliteTime(); + if (internal <= 0) { + Log.d(FORECAST, "time internal less than 0 , uuid : " + adasResult.getUuid()); + continue; + } + long startTime = System.currentTimeMillis(); + // 预测点 + Log.d(FORECAST, "time internal : " + internal + " speed : " + adasResult.getSpeed()); + double foreCastDistance = adasResult.getSpeed() * internal / 1000; + Log.d(FORECAST, "foreCastDistance : " + foreCastDistance); + MogoLatLng mogoLatLng = new MogoLatLng(adasResult.getLat(), adasResult.getLon()); + MogoLatLng foreCastMogoLatLon = Trigonometric.getNewLocation(mogoLatLng, foreCastDistance, adasResult.getHeading()); + + // 计算与自车距离 + float distanceFromSelf = CoordinateUtils.calculateLineDistance(getCurCoordinates()[0], getCurCoordinates()[1] + , foreCastMogoLatLon.getLon(), foreCastMogoLatLon.getLat()); + + long foreCastInternal = System.currentTimeMillis() - startTime; + Log.d(FORECAST, "foreCastInternal :" + foreCastInternal); //todo 耗时1~2毫秒 需要测试是否由于补点算法造成 + + adasResult.setLat(foreCastMogoLatLon.getLat()); + adasResult.setLon(foreCastMogoLatLon.getLon()); + adasResult.setSatelliteTime((getCurSatelliteTime() - foreCastInternal)); + adasResult.setDistance(distanceFromSelf); + } + } + } + + /** + * todo 后面涉及到此类变化的数据均改动 + * + * @param marker + * @param recognizedListResult + */ + private void updateCacheMarkerRes(IMogoMarker marker, TrafficData recognizedListResult) { + String resIdVal; + int resId = getModelRes(recognizedListResult.getType().getType()); + resIdVal = resId + ""; + String resName = mMarkerCachesResMd5Values.get(resIdVal); + if (!TextUtils.isEmpty(resName)) { + if (!TextUtils.equals(resName, marker.getMarkerResName())) { + marker.use3DResource(resName); + } + } else { + resName = marker.use3DResource(resId); + mMarkerCachesResMd5Values.put(resIdVal, resName); + } + } + + private void removeUselessLastRecord() { // todo 最好重新设计一个数据结构,用于多线程数据过期失效的场景,参见redis数据过期 + if (mLastPositions.isEmpty()) { + return; + } + Iterator iterator = mLastPositions.values().iterator(); + while (iterator.hasNext()) { + TrafficData result = iterator.next(); + long internal = result.getSatelliteTime() - getCurSatelliteTime(); + if (internal > 3000) { //防止帧率过低导致误删除上一个节点对象,从而出现跳跃现象 + iterator.remove(); + } + } + } + + /** + * 过滤无用数据 + * + * @param recognizedListResult {@link TrafficData} + * @return useless + */ + private boolean isUselessValue(TrafficData recognizedListResult) { + if (recognizedListResult == null) { + return true; + } + if (nonRenderType(recognizedListResult.getType().getType())) { + return true; + } + String uniqueKey = recognizedListResult.getUuid(); + return TextUtils.isEmpty(uniqueKey); + } + + /** + * 绘制某个物体的一个数据 + * + * @param recognizedListResult {@link TrafficData} + * @param newAdasRecognizedMarkersCaches 缓存集合 + */ + private void renderAdasOneFrame(IMogoMarker marker, + String uniqueKey, + TrafficData recognizedListResult, + Map newAdasRecognizedMarkersCaches) { + final long start = System.nanoTime(); +// Log.d(TAG, "renderAdasOneFrame uuid : " + uniqueKey + " type : " + recognizedListResult.type + " heading : " + recognizedListResult.heading); + TrafficData lastPosition = mLastPositions.remove(uniqueKey); + // 道路吸附 +// double lastLon = -1; +// double lastLat = -1; +// if (lastPosition != null) { +// lastLon = lastPosition.lon; +// lastLat = lastPosition.lat; +// } +// double[] matchLonLat = getMatchLonLat(recognizedListResult.uuid, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading, lastLon, lastLat); +// +// recognizedListResult.lon = matchLonLat[0]; +// recognizedListResult.lat = matchLonLat[1]; +// Log.d( "matchRoad", "cost = %s", System.currentTimeMillis() - start ); + + mLastPositions.put(uniqueKey, recognizedListResult); +// Log.d(TAG, "使用缓存 id : " + uniqueKey); + long interval = 45; + if (lastPosition != null) { + interval = computeAnimDuration(lastPosition.getSatelliteTime(), recognizedListResult.getSatelliteTime()); + } + final MogoLatLng renderLoc = new MogoLatLng(recognizedListResult.getLat(), recognizedListResult.getLon()); + long cost = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start); + //Log.d("ADAS动画数据", "cost : " + cost); + final long intervalRef = interval - cost; + //Log.d("ADAS动画数据", "最终赋值 : " + intervalRef + " 两帧间隔 : " + interval + " uuid : " + recognizedListResult.getUuid()); + marker.addDynamicAnchorPosition(renderLoc, (float) recognizedListResult.getHeading(), intervalRef); + String carColor = getModelRenderColor(recognizedListResult.getType().getType(), FROM_ADAS, recognizedListResult.getThreatLevel()); + marker.setAnchorColor(carColor); + + newAdasRecognizedMarkersCaches.put(uniqueKey, marker); + +// if (shouldShowSpeed(recognizedListResult.type)) { +// Message msg = mRenderThreadHandler.obtainMessage(); +// msg.obj = new SpeedData(marker +// , recognizedListResult.speed +// , recognizedListResult.uuid +// , recognizedListResult.type +// , recognizedListResult.heading +// , MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()); +// msg.what = MSG_DISPLAY_SPEED; +// msg.sendToTarget(); +// } + Log.d("ADAS数据延时", "render 刷新一台车 cost : " + TimeUnit.NANOSECONDS.toMillis((System.nanoTime() - start))); + } + + /** + * 绘制 marker + * + * @param recognizedListResult {@link TrafficData} + * @return {@link IMogoMarker} + */ + private IMogoMarker drawAdasRecognizedDataMarker(TrafficData recognizedListResult) { + long start = System.nanoTime(); + if (recognizedListResult == null) { + return null; + } + + int resId = getModelRes(recognizedListResult.getType().getType()); + String resIdVal = resId + ""; + + String carColor = getModelRenderColor(recognizedListResult.getType().getType(), FROM_ADAS, recognizedListResult.getThreatLevel()); + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(DataTypes.TYPE_MARKER_ADAS) + .anchor(0.5f, 0.5f) + .set3DMode(true) + .gps(true) + .anchorColor(carColor) + .controlAngle(true) + .resName(mMarkerCachesResMd5Values.get(resIdVal)) + .icon3DRes(resId) + .rotate((float) recognizedListResult.getHeading()) + .position(new MogoLatLng(recognizedListResult.getLat(), recognizedListResult.getLon())); + IMogoMarker marker = MogoMarkerManager.getInstance(mContext).addMarker(DataTypes.TYPE_MARKER_ADAS, options); + cacheMarkerIconResMd5Val(resIdVal, marker); + Log.d("ADAS数据延时", "创建一个新 marker cost : " + TimeUnit.NANOSECONDS.toMillis((System.nanoTime() - start))); + return marker; + } + + /** + * vr 模式切换 + */ + public void notifyVrModeChanged() { + clearOldMarker(); + } + + /** + * 清除旧的 marker 数据 + */ + public void clearOldMarker() { + if (mMarkersCaches != null) { + mMarkersCaches.clear(); + } + mLastPositions.clear(); + sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_ADAS); + } +} diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/IdentifyDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/IdentifyDataDrawer.java index 22be83ab23..60e29e4d97 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/IdentifyDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/IdentifyDataDrawer.java @@ -8,6 +8,7 @@ import com.mogo.eagle.core.data.enums.TrafficTypeEnum; import com.mogo.eagle.core.data.traffic.TrafficData; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMarkerManager; import com.mogo.module.common.MogoApisHandler; import java.util.ArrayList; @@ -109,9 +110,7 @@ public class IdentifyDataDrawer { // } // 绘制新数据 - MogoApisHandler.getInstance().getApis() - .getMapServiceApi() - .getMarkerManager(mContext) + MogoMarkerManager.getInstance(mContext) .updateBatchMarkerPosition(filterTrafficData(resultList)); } @@ -140,9 +139,7 @@ public class IdentifyDataDrawer { */ public void clearOldMarker() { for (String uuid : trafficDataUuidList) { - MogoApisHandler.getInstance().getApis() - .getMapServiceApi() - .getMarkerManager(mContext) + MogoMarkerManager.getInstance(mContext) .removeMarker(uuid); } trafficDataUuidList.clear(); @@ -172,9 +169,7 @@ public class IdentifyDataDrawer { * @param s */ private void addPreVehicleModelWeiZhi(TrafficTypeEnum typeTrafficIdWeiZhi, String s) { - String preVehicleStrWeiZhi = MogoApisHandler.getInstance().getApis() - .getMapServiceApi() - .getMarkerManager(mContext) + String preVehicleStrWeiZhi = MogoMarkerManager.getInstance(mContext) .addPreVehicleModel(typeTrafficIdWeiZhi.getType(), typeTrafficIdWeiZhi.getTraffic3DIconId()); CallerLogger.INSTANCE.d(TAG, s + preVehicleStrWeiZhi); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java index 8ad3349e4e..eb90dc70dc 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.MogoMarkerOptions; @@ -110,7 +111,7 @@ class MarkerDrawer { options.icon(markerView.getBitmap(0)); } - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).addMarker(markerShowEntity.getMarkerType(), options); + IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).addMarker(markerShowEntity.getMarkerType(), options); if (marker != null) { marker.setOwner(markerShowEntity.getMarkerType()); markerView.setMarker(marker); @@ -129,7 +130,7 @@ class MarkerDrawer { */ public Map purgeMarkerData(List newList, String markerType) { Map existMap = new HashMap<>(); - List allCarsList = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).getMarkers(markerType); + List allCarsList = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).getMarkers(markerType); if (allCarsList == null || allCarsList.isEmpty()) { return existMap; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java index 02d08f9bba..1049fdf654 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java @@ -4,6 +4,7 @@ import android.view.animation.LinearInterpolator; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.anim.OnMarkerAnimationListener; @@ -60,7 +61,7 @@ class RoadConditionDrawer { public void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList, int maxAmount, IMogoMarkerClickListener listener ) { // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗 if ( exploreWayList == null || exploreWayList.isEmpty() ) { - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION ); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION ); return; } int size = MarkerDrawer.getInstance().getAppropriateSize( maxAmount, exploreWayList ); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java index b1a812336d..2f3e6a9c13 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java @@ -15,6 +15,7 @@ import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ViewUtils; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.MogoMarkerOptions; @@ -407,7 +408,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic options.icon(view); resIdVal = view.getId() + ""; } - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(TYPE_MARKER_CLOUD_DATA, options); + IMogoMarker marker = MogoMarkerManager.getInstance(mContext).addMarker(TYPE_MARKER_CLOUD_DATA, options); cacheMarkerIconResMd5Val(resIdVal, marker); if (!TextUtils.isEmpty(data.getSn())) { diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt index 9e4083f26d..629f16813f 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt @@ -13,6 +13,7 @@ import com.mogo.eagle.core.data.traffic.TrafficData import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler +import com.mogo.map.MogoMarkerManager import java.util.concurrent.ConcurrentHashMap /** @@ -197,11 +198,7 @@ object TrafficMarkerDrawer { } } } - - val marker = MogoApisHandler.getInstance().apis - .mapServiceApi - .getMarkerManager(mContext) - .addMarker(DataTypes.TYPE_MARKER_OBU_DATA, options) + val marker = MogoMarkerManager.getInstance(mContext).addMarker(DataTypes.TYPE_MARKER_OBU_DATA, options) // 缓存3D资源 mMarkerCachesResMd5Values[resIdVal] = marker.markerResName diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java index 9eca458d44..c30c8cf2ea 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java @@ -6,6 +6,8 @@ import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_WARN_ import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.eagle.core.utilcode.util.ViewUtils; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.MogoApisHandler; @@ -105,7 +107,7 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); options.icon3DRes(getModelRes(modeResType)); //TODO options.anchorColor("#FB3C3CFF"); - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options); + IMogoMarker marker = MogoMarkerManager.getInstance(mContext).addMarker(markerShowEntity.getMarkerType(), options); iMarkerView.setMarker(marker); marker.setToTop(); @@ -122,7 +124,7 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL .icon3DRes(getModelRes(type)) .anchorColor("#FB3C3CFF") .flat(true); - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerType, options); + IMogoMarker marker = MogoMarkerManager.getInstance(mContext).addMarker(markerType, options); marker.setRotateAngle(rotate); } @@ -155,7 +157,7 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); options.icon3DRes(getModelRes(9)); options.anchorColor("#FB3C3CFF"); - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options); + IMogoMarker marker = MogoMarkerManager.getInstance(mContext).addMarker(markerShowEntity.getMarkerType(), options); iMarkerView.setMarker(marker); marker.setToTop(); return marker; diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 8830e4f793..93aa5832ec 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -6,16 +6,14 @@ import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.drawer.MarkerDrawer; -import com.mogo.module.common.entity.MarkerResponse; -import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.marker.MapMarkerManager; import com.mogo.service.IMogoServiceApis; import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.cloud.socket.IMogoSocketManager; import com.mogo.service.datamanager.IMogoDataManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.service.imageloader.IMogoImageloader; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -31,9 +29,7 @@ public class MarkerServiceHandler { private static final String TAG = "MarkerServiceHandler"; private static IMogoServiceApis sApis; - private static IMogoMapService sMapService; - private static IMogoMarkerManager sMarkerManager; - private static IMogoMapUIController sMapUIController; + private static IMogoStatusManager sMogoStatusManager; private static IMogoAnalytics sMogoAnalytics; private static IMogoRegisterCenter sRegisterCenter; @@ -44,11 +40,8 @@ public class MarkerServiceHandler { public static synchronized void init(final Context context) { sApis = MogoApisHandler.getInstance().getApis(); - sMapService = sApis.getMapServiceApi(); sMogoStatusManager = sApis.getStatusManagerApi(); sMogoAnalytics = sApis.getAnalyticsApi(); - sMarkerManager = sMapService.getMarkerManager(context); - sMapUIController = sMapService.getMapUIController(); sRegisterCenter = sApis.getRegisterCenterApi(); sActionManager = sApis.getActionManagerApi(); sDataManager = sApis.getDataManagerApi(); @@ -61,18 +54,6 @@ public class MarkerServiceHandler { return sApis; } - public static IMogoMapService getMapService() { - return sMapService; - } - - public static IMogoMarkerManager getMarkerManager() { - return sMarkerManager; - } - - public static IMogoMapUIController getMapUIController() { - return sMapUIController; - } - public static IMogoStatusManager getMogoStatusManager() { return sMogoStatusManager; } @@ -81,10 +62,6 @@ public class MarkerServiceHandler { return sMogoAnalytics; } - public static MapMarkerManager getMapMarkerManager() { - return MapMarkerManager.getInstance(); - } - public static IMogoRegisterCenter getRegisterCenter() { return sRegisterCenter; } @@ -104,36 +81,4 @@ public class MarkerServiceHandler { public static IMogoDataManager getDataManager() { return sDataManager; } - - //TODO -------------以下方法是临时过度使用的,后面统一使用,getMapMarkerManager进行调用 - - /** - * 绘制Marker - * 建议使用 - * - * @see MapMarkerManager#drawMapMarker(MarkerResponse) - */ - @Deprecated - public static void drawMapMarker(MarkerResponse response) { - getMapMarkerManager().drawMapMarker(response); - } - - /** - * 绘制Marker - * 建议使用 - * - * @see MapMarkerManager#drawMapMarker(MarkerShowEntity, int) - */ - @Deprecated - public static IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { - return getMapMarkerManager().drawMapMarker(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH); - } - - /** - * 对指定类型高亮处理 - * 建议使用 - */ - @Deprecated - public static void highlightedMarker(String typeTag) { - } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 6f63da19fc..1f45b9bfdc 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -22,12 +22,13 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.map.IDestroyable; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.uicontroller.EnumMapUI; -import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; @@ -47,7 +48,6 @@ import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.MogoAction; @@ -105,8 +105,6 @@ public class MogoServices implements IMogoMapListener, private MogoLatLng mLastAutoRefreshLocation = null; - private IMogoMapUIController mUiController; - /** * 是否已计算出地图显示状态 */ @@ -125,7 +123,6 @@ public class MogoServices implements IMogoMapListener, // 上次手动操作的中心点坐标 private MogoLatLng mLastCustomRefreshCenterLocation; - private IMogoMapService mMogoMapService; private IMogoStatusManager mStatusManager; private IMogoIntentManager mIntentManager; private IMogoActionManager mActionManager; @@ -187,13 +184,13 @@ public class MogoServices implements IMogoMapListener, private void invokeAutoRefresh() { if (mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow()) { mStatusManager.setUserInteractionStatus(TAG, true, false); - mUiController.recoverLockMode(); + MogoMapUIController.getInstance().recoverLockMode(); return; } mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false); - mUiController.changeZoom(ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL); + MogoMapUIController.getInstance().changeZoom(ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL); mStatusManager.setUserInteractionStatus(TAG, true, false); - mUiController.recoverLockMode(); + MogoMapUIController.getInstance().recoverLockMode(); notifyRefreshData(mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback); } @@ -275,10 +272,7 @@ public class MogoServices implements IMogoMapListener, public void preInit(Context context) { mContext = context; - mRefreshModel = new RefreshModel(context); - mMogoMapService = MarkerServiceHandler.getMapService(); - mUiController = mMogoMapService.getMapUIController(); - + mRefreshModel = new RefreshModel( context ); mStatusManager = MarkerServiceHandler.getMogoStatusManager(); mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.USER_INTERACTED, statusChangedListener); mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.SEARCH_UI, statusChangedListener); @@ -445,7 +439,7 @@ public class MogoServices implements IMogoMapListener, switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: if (mLastZoomLevel == 0) { - mLastZoomLevel = mUiController.getZoomLevel(); + mLastZoomLevel = MogoMapUIController.getInstance().getZoomLevel(); } break; case MotionEvent.ACTION_UP: @@ -528,8 +522,8 @@ public class MogoServices implements IMogoMapListener, } private int getQueryRadius() { - mCameraSouthWestPosition = mUiController.getCameraSouthWestPosition(); - mCameraNorthEastPosition = mUiController.getCameraNorthEastPosition(); + mCameraSouthWestPosition = MogoMapUIController.getInstance().getCameraSouthWestPosition(); + mCameraNorthEastPosition = MogoMapUIController.getInstance().getCameraNorthEastPosition(); int radius; if (mIsVertical) { radius = ((int) (getMapCameraFactWidth() / 2)); @@ -594,12 +588,12 @@ public class MogoServices implements IMogoMapListener, startFirstLocationRequest(point); return; } - float distance = Utils.calculateLineDistance(mLastAutoRefreshLocation, point); - if (distance > mAutoRefreshStrategy.getDistance()) { - mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false); - mUiController.recoverLockMode(); - mStatusManager.setUserInteractionStatus(TAG, true, false); - mUiController.changeZoom(ServiceConst.DEFAULT_ZOOM_LEVEL); + float distance = Utils.calculateLineDistance( mLastAutoRefreshLocation, point ); + if ( distance > mAutoRefreshStrategy.getDistance() ) { + mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); + MogoMapUIController.getInstance().recoverLockMode(); + mStatusManager.setUserInteractionStatus( TAG, true, false ); + MogoMapUIController.getInstance().changeZoom( ServiceConst.DEFAULT_ZOOM_LEVEL ); mLastAutoRefreshLocation = point; notifyRefreshData(mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback); } @@ -659,8 +653,8 @@ public class MogoServices implements IMogoMapListener, public void clearAllData() { try { - MarkerServiceHandler.getMapService().getMarkerManager(mContext).removeMarkers(); - } catch (Exception e) { + MogoMarkerManager.getInstance(mContext).removeMarkers(); + } catch ( Exception e ) { e.printStackTrace(); } } @@ -684,9 +678,9 @@ public class MogoServices implements IMogoMapListener, } public void refreshStrategy() { - mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false); - mUiController.recoverLockMode();// 锁车代替移到中心点 - restartAutoRefreshAtTime(0); + mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); + MogoMapUIController.getInstance().recoverLockMode();// 锁车代替移到中心点 + restartAutoRefreshAtTime( 0 ); } @@ -729,14 +723,14 @@ public class MogoServices implements IMogoMapListener, } @Override - public void onCmdSelected(String cmd) { - if (TextUtils.equals(ServiceConst.CMD_UN_WAKE_PREV, cmd)) { - onActionDone(MogoAction.Prev); - } else if (TextUtils.equals(ServiceConst.CMD_UN_WAKE_NEXT, cmd)) { - onActionDone(MogoAction.Next); - } else if (TextUtils.equals(ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd)) { - if (mStatusManager.isMainPageOnResume()) { - mUiController.recoverLockMode(); + public void onCmdSelected( String cmd ) { + if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_PREV, cmd ) ) { + onActionDone( MogoAction.Prev ); + } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_NEXT, cmd ) ) { + onActionDone( MogoAction.Next ); + } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd ) ) { + if ( mStatusManager.isMainPageOnResume() ) { + MogoMapUIController.getInstance().recoverLockMode(); } } else if (TextUtils.equals(ServiceConst.CMD_BACK, cmd)) { mFragmentManager.clearAll(); @@ -757,17 +751,17 @@ public class MogoServices implements IMogoMapListener, } @Override - public void onTransaction(int size) { - if (size == 0) { - mUiController.showMyLocation(true); - AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ServiceConst.CMD_BACK); - if (mStatusManager.isSearchUIShow()) { - mStatusManager.setSearchUIShow(TAG, false); + public void onTransaction( int size ) { + if ( size == 0 ) { + MogoMapUIController.getInstance().showMyLocation( true ); + AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK ); + if ( mStatusManager.isSearchUIShow() ) { + mStatusManager.setSearchUIShow( TAG, false ); } - mUiController.recoverLockMode(); + MogoMapUIController.getInstance().recoverLockMode(); } else { - mUiController.showMyLocation(false); - AIAssist.getInstance(mContext).registerUnWakeupCommand(ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this); + MogoMapUIController.getInstance().showMyLocation( false ); + AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this ); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java index a559412815..5da99f4035 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java @@ -5,6 +5,8 @@ import android.content.Intent; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoLocationClient; +import com.mogo.map.MogoMarkerManager; import com.mogo.module.service.launchercard.LauncherCardRefresher; import com.mogo.module.service.marker.MapMarkerManager; import com.mogo.service.statusmanager.IMogoStatusChangedListener; @@ -131,14 +133,14 @@ abstract class StatusChangedAdapter implements IMogoStatusChangedListener { mIsFirstAccOn = false; return; } - MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient(AbsMogoApplication.getApp()).start(); - MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).removeMarkers(); + MogoLocationClient.getInstance(AbsMogoApplication.getApp()).start(); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(); UiThreadHandler.postDelayed(() -> { MogoServices.getInstance().refreshStrategy(); }, 3_000L); } else { - MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient(AbsMogoApplication.getApp()).stop(); - MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).removeMarkers(); + MogoLocationClient.getInstance(AbsMogoApplication.getApp()).stop(); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/handler/RefreshWorkThreadHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/handler/RefreshWorkThreadHandler.java index 902c7251af..04e1cc8ae6 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/handler/RefreshWorkThreadHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/handler/RefreshWorkThreadHandler.java @@ -5,6 +5,7 @@ import android.os.Looper; import android.os.Message; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.map.MogoMapUIController; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.service.ServiceConst; @@ -58,7 +59,7 @@ abstract class RefreshWorkThreadHandler extends Handler { if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { return; } - MogoApisHandler.getInstance().getApis().getStatusManagerApi().setUserInteractionStatus(TAG, true, false); - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().recoverLockMode(); + MogoApisHandler.getInstance().getApis().getStatusManagerApi().setUserInteractionStatus( TAG, true, false ); + MogoMapUIController.getInstance().recoverLockMode(); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java index e37f9be844..9dee9fd091 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java @@ -16,14 +16,20 @@ import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.autopilot.AutopilotCarStateInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.traffic.TrafficData; +import com.mogo.eagle.core.function.api.map.IMogoMapFrameController; +import com.mogo.eagle.core.function.call.base.CallerBase; +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.AppStateManager; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.search.geo.IMogoGeoSearch; @@ -31,7 +37,6 @@ import com.mogo.map.search.geo.IMogoGeoSearchListener; import com.mogo.map.search.geo.MogoGeocodeResult; import com.mogo.map.search.geo.MogoRegeocodeResult; import com.mogo.map.search.geo.query.MogoRegeocodeQuery; -import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.constants.DataTypes; import com.mogo.module.common.datacenter.SnapshotLocationDataCenter; import com.mogo.module.common.dialog.WMDialog; @@ -70,7 +75,7 @@ public class MockIntentHandler implements IntentHandler { switch (oper) { case 1: // 展示自车位置 - MarkerServiceHandler.getMapUIController().showMyLocation(intent.getBooleanExtra("status", true)); + MogoMapUIController.getInstance().showMyLocation(intent.getBooleanExtra("status", true)); break; case 2: // 发起求助 @@ -89,7 +94,7 @@ public class MockIntentHandler implements IntentHandler { break; case 8:// 测试修改车头角度 float bearing = intent.getFloatExtra("bearing", 0); - MarkerServiceHandler.getMapUIController().changeBearing(bearing); + MogoMapUIController.getInstance().changeBearing(bearing); break; case 9:// 测试弹窗 Activity activity = AppStateManager.INSTANCE.currentActivity(); @@ -103,7 +108,7 @@ public class MockIntentHandler implements IntentHandler { } break; case 10://测试GEO查询 - IMogoGeoSearch geoSearch = MarkerServiceHandler.getMapService().getGeoSearch(context); + IMogoGeoSearch geoSearch = CallerMapUIServiceManager.INSTANCE.getGeoSearch(context); geoSearch.setGeoSearchListener(new IMogoGeoSearchListener() { @Override public void onRegeocodeSearched(MogoRegeocodeResult regeocodeResult) { @@ -235,10 +240,10 @@ public class MockIntentHandler implements IntentHandler { .owner(TAG) .autoManager(false); int duration = intent.getIntExtra("duration", 30); - IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker(TAG, options); + IMogoMarker marker = MogoMarkerManager.getInstance(context).addMarker(TAG, options); MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(TAG, true, false); if (!MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode()) { - MarkerServiceHandler.getMapUIController().moveToCenter(mogoLatLngs.get(0)); + MogoMapUIController.getInstance().moveToCenter(mogoLatLngs.get(0)); } WorkThreadHandler.getInstance().post(() -> marker.startSmooth(mogoLatLngs, duration)); break; @@ -251,7 +256,7 @@ public class MockIntentHandler implements IntentHandler { SharedPrefsMgr.getInstance(context).putBoolean("useCustomMap", intent.getBooleanExtra("useCustomMap", false)); break; case 30:// 强制刷新地图 - MarkerServiceHandler.getMapService().getMapUIController().forceRender(); + MogoMapUIController.getInstance().forceRender(); break; case 31:// Intent intent3 = new Intent(); @@ -261,7 +266,7 @@ public class MockIntentHandler implements IntentHandler { context.sendBroadcast(intent3); break; case 32:// 控制实时路况 - MarkerServiceHandler.getMapService().getMapUIController().setTrafficEnabled(true); + MogoMapUIController.getInstance().setTrafficEnabled(true); break; case 33:// 测试小智语音 AIAssist.getInstance(context).speakTTSVoice("庞帆说这个是一个 hard coding."); @@ -269,17 +274,15 @@ public class MockIntentHandler implements IntentHandler { case 34:// 修改地图模式VR OR 2D int type = intent.getIntExtra("type", 0); if (type != 0) { - MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeToVRMode(); + CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).changeToVRMode(); } else { - MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeTo2dMode(); + CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).changeTo2dMode(); } break; case 36:// 测试打点功能 - MogoLatLng center = MogoApisHandler.getInstance().getApis() - .getMapServiceApi().getMapUIController() + MogoLatLng center = MogoMapUIController.getInstance() .getWindowCenterLocation(); - centerMarker = MogoApisHandler.getInstance().getApis() - .getMapServiceApi().getMarkerManager(context) + centerMarker = MogoMarkerManager.getInstance(context) .addMarker(TAG, new MogoMarkerOptions() .position(center) .icon(BitmapFactory.decodeResource(context.getResources(), R.drawable.bg_map_marker_red))); @@ -290,7 +293,7 @@ public class MockIntentHandler implements IntentHandler { } break; case 38:// 控制RTK - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController() + MogoMapUIController.getInstance() .rtkEnable(false); break; case 40: @@ -404,10 +407,7 @@ public class MockIntentHandler implements IntentHandler { }); break; case 45:// 测试开启鹰眼模式 - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() + MogoMapUIController.getInstance() .openVrMode(false); break; case 46:// 模拟鹰眼模式下绘制车辆周边的数据 @@ -423,7 +423,7 @@ public class MockIntentHandler implements IntentHandler { .controlAngle(true) .icon3DRes(R.raw.special_vehicle) .rotate((float) 358.526123); - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options); + IMogoMarker marker = MogoMarkerManager.getInstance(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options); List latLngs = new ArrayList<>(); latLngs.add(new MogoLatLng(39.981971055705, 116.41150648393)); latLngs.add(new MogoLatLng(39.981990561932, 116.412893641626)); @@ -441,7 +441,7 @@ public class MockIntentHandler implements IntentHandler { .controlAngle(false) .icon(BitmapFactory.decodeResource(context.getResources(), R.drawable.sy)) .rotate((float) 358.526123); - IMogoMarker marker1 = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options1); + IMogoMarker marker1 = MogoMarkerManager.getInstance(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options1); MogoMarkerOptions options2 = new MogoMarkerOptions() .owner(DataTypes.TYPE_MARKER_ADAS) .anchor(0.5f, 0.5f) @@ -451,7 +451,7 @@ public class MockIntentHandler implements IntentHandler { .controlAngle(false) .icon(BitmapFactory.decodeResource(context.getResources(), R.drawable.sr)) .rotate((float) 358.526123); - IMogoMarker marker2 = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options2); + IMogoMarker marker2 = MogoMarkerManager.getInstance(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options2); MogoMarkerOptions options3 = new MogoMarkerOptions() .owner(DataTypes.TYPE_MARKER_ADAS) .anchor(0.5f, 0.5f) @@ -461,7 +461,7 @@ public class MockIntentHandler implements IntentHandler { .controlAngle(false) .icon(BitmapFactory.decodeResource(context.getResources(), R.drawable.bg_map_marker_red)) .rotate((float) 358.526123); - IMogoMarker marker3 = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options3); + IMogoMarker marker3 = MogoMarkerManager.getInstance(context).addMarker(DataTypes.TYPE_MARKER_ADAS, options3); break; case 51:// 模拟路口车辆移动 // mLocationMockHandler.sendEmptyMessageDelayed(100, 0L); @@ -499,7 +499,7 @@ public class MockIntentHandler implements IntentHandler { locJo.put("satelliteTime", System.currentTimeMillis()); locJo.put("systemTime", System.currentTimeMillis()); } - MarkerServiceHandler.getApis().getMapServiceApi().getMapUIController().syncLocation2Map(locJo); + MogoMapUIController.getInstance().syncLocation2Map(locJo); mLocationMockHandler.sendEmptyMessageDelayed(100, 50L); } @@ -540,7 +540,7 @@ public class MockIntentHandler implements IntentHandler { data.putOpt("heading", stateInfo.getValues().getHeading()); data.putOpt("acceleration", stateInfo.getValues().getAcceleration()); data.putOpt("yawRate", stateInfo.getValues().getYaw_rate()); - MarkerServiceHandler.getApis().getMapServiceApi().getMapUIController().syncLocation2Map(data); + MogoMapUIController.getInstance().syncLocation2Map(data); // SnapshotUploadInTime.getInstance().syncAdasLocationInfo( data ); } catch (Exception e) { e.printStackTrace(); @@ -711,7 +711,7 @@ public class MockIntentHandler implements IntentHandler { } JSONObject jo = new JSONObject(line); //改变rtk定位数据,触发自车移动 - MarkerServiceHandler.getApis().getMapServiceApi().getMapUIController().syncLocation2Map(jo); + MogoMapUIController.getInstance().syncLocation2Map(jo); SnapshotLocationDataCenter.getInstance().syncAdasLocationInfo(jo); return true; } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java index 6da893ac9c..efa65cd510 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; import com.mogo.module.service.MarkerServiceHandler; /** @@ -20,10 +21,10 @@ public class MyLocationHandler implements IntentHandler { return; } if ( MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume() ) { - MarkerServiceHandler.getMapUIController().recoverLockMode(); + MogoMapUIController.getInstance().recoverLockMode(); } else { UiThreadHandler.postDelayed( () -> { - MarkerServiceHandler.getMapUIController().recoverLockMode(); + MogoMapUIController.getInstance().recoverLockMode(); }, 2_000L ); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/NetworkChangedIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/NetworkChangedIntentHandler.java index e71b8d0efe..9273eed4ef 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/NetworkChangedIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/NetworkChangedIntentHandler.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.Intent; import com.mogo.eagle.core.utilcode.util.NetworkUtils; -import com.mogo.module.common.MogoApisHandler; +import com.mogo.map.MogoMapUIController; public /** @@ -21,10 +21,7 @@ class NetworkChangedIntentHandler implements IntentHandler { public void handle( Context context, Intent intent ) { if ( NetworkUtils.isConnected( context ) ) { try { - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() + MogoMapUIController.getInstance() .setTrafficEnabled( true ); } catch ( Exception e ) { e.printStackTrace(); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java index 4fed421d0a..f3232b65e1 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java @@ -19,6 +19,7 @@ import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.AppUtils; import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.map.MogoLocationClient; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.R; @@ -180,10 +181,7 @@ class LauncherCardRefresher { } private void trtRequestNetworkConfigStrategy() { - if ( NetworkUtils.isConnected( mContext ) && MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getSingletonLocationClient( mContext ) + if ( NetworkUtils.isConnected( mContext ) && MogoLocationClient.getInstance(mContext) .getLastKnowLocation() != null ) { mHandler.sendEmptyMessageDelayed( MSG_LOAD_NET_CONFIG, 0L ); mHandler.sendEmptyMessageDelayed( MSG_LOAD_NET_CONFIG2, 2 * ONE_MINUTE ); @@ -385,7 +383,7 @@ class LauncherCardRefresher { String name = SharedPrefsMgr.getInstance( mContext ).getString( KEY_LAST_LOAD_TTS_TYPE, LauncherCardRefreshType.Weather.name() ); LauncherCardRefreshType type = LauncherCardRefreshType.valueOf( name ); - MogoLocation location = MogoApisHandler.getInstance().getApis().getMapServiceApi().getSingletonLocationClient( mContext ).getLastKnowLocation(); + MogoLocation location = MogoLocationClient.getInstance(mContext).getLastKnowLocation(); TtsConfigBody body = new TtsConfigBody() .addType( LauncherCardRefreshType.NearRoads.getVal() ) .addType( LauncherCardRefreshType.News.getVal() ) diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index ffd03b7eec..47985d6f28 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -12,6 +12,8 @@ import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper; import com.mogo.eagle.core.utilcode.util.ThreadPoolService; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.eagle.core.utilcode.util.ViewUtils; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; @@ -235,7 +237,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } if (!MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode()) { MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(TAG, true, false); - MarkerServiceHandler.getMapUIController().moveToCenter(mogoMarker.getPosition(), true); + MogoMapUIController.getInstance().moveToCenter(mogoMarker.getPosition(), true); } } @@ -347,7 +349,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } - if (MarkerServiceHandler.getMapUIController().getCurrentMapVisualAngle().isLongSight()) { + if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight()) { return; } @@ -601,7 +603,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * 移除在线车辆 marker */ private void removeCarMarkers() { - MarkerServiceHandler.getMarkerManager().removeMarkers(ModuleNames.CARD_TYPE_USER_DATA); + MogoMarkerManager.getInstance(mContext).removeMarkers(ModuleNames.CARD_TYPE_USER_DATA); } /** @@ -614,7 +616,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, || MarkerServiceHandler.getMogoStatusManager().isV2XShow() || !MarkerServiceHandler.getMogoStatusManager().isMainPageLaunched() || !MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume() - || MarkerServiceHandler.getMapUIController().getCurrentMapVisualAngle().isLongSight(); + || MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight(); } private void runOnTargetThread(Runnable runnable) { @@ -633,7 +635,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if (data instanceof MarkerShowEntity && ((MarkerShowEntity) data).getMarker() != null) { switchMarkerOpenStatus(((MarkerShowEntity) data).getMarker()); } else { - IMogoMarkerManager markerManager = MarkerServiceHandler.getMarkerManager(); + IMogoMarkerManager markerManager = MogoMarkerManager.getInstance(mContext); List markers = markerManager.getMarkers(biz); if (markers != null) { try { @@ -661,7 +663,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, public void redrawMarkerByStyleChanged() { if (mLastDataResult != null) { runOnTargetThread(() -> { - MarkerServiceHandler.getMarkerManager().removeMarkers(ModuleNames.CARD_TYPE_ROAD_CONDITION); + MogoMarkerManager.getInstance(mContext).removeMarkers(ModuleNames.CARD_TYPE_ROAD_CONDITION); drawMarkerByCurrentType(mLastDataResult); mLastCheckMarker = null; }); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java index a194bf73d1..c45236b594 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java @@ -10,6 +10,9 @@ import android.graphics.Color; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ColorUtils; +import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.map.MogoMarkerManager; +import com.mogo.map.MogoOverlayManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.overlay.IMogoOverlayManager; @@ -49,7 +52,7 @@ public class RouteOverlayDrawer { // 引导线颜色, mPolylineColors = new ArrayList<>(); mContext = context; - mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext); + mogoOverlayManager = MogoOverlayManager.getInstance(); endingBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_route_ending); } @@ -74,7 +77,6 @@ public class RouteOverlayDrawer { return sInstance; } - public void addEndingMarker(double lat, double lon) { if (endMarker != null) { return; @@ -92,7 +94,7 @@ public class RouteOverlayDrawer { } markderOptions.latitude(lat).longitude(lon); //CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG,"addEndingMarker-"+lat+":"+lon); - endMarker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerType, markderOptions); + endMarker = MogoMarkerManager.getInstance(mContext).addMarker(markerType, markderOptions); // if (DebugConfig.isDebug()){ // ToastUtils.showLong("绘制终点marker,"+lat+":"+lon); // } @@ -110,7 +112,7 @@ public class RouteOverlayDrawer { public void clearEndingMarker() { //CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG,"clearEndingMarker"); endMarker = null; - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).removeMarkers(markerType); + MogoMarkerManager.getInstance(mContext).removeMarkers(markerType); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java index 00ec962e84..eb72d214a9 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -12,10 +12,7 @@ import com.mogo.service.datamanager.IMogoDataManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.imageloader.IMogoImageloader; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.map.IMogoMapFrameController; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; -import com.mogo.service.module.IMogoMarkerService; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -74,13 +71,6 @@ public interface IMogoServiceApis extends IProvider { */ IMogoIntentManager getIntentManagerApi(); - /** - * 地图方服务接口 - * - * @return - */ - IMogoMapService getMapServiceApi(); - /** * 各业务回调接口注册接口 * @@ -139,13 +129,6 @@ public interface IMogoServiceApis extends IProvider { */ DisplayEffectsInterface getDisplayEffectsManager(); - /** - * 其他模块调用公共的marker打点 - * - * @return - */ - IMogoMarkerService getMarkerService(); - /** * 获取位置上报服务接口 * @@ -159,12 +142,4 @@ public interface IMogoServiceApis extends IProvider { * @return */ IMogoPassportManager getPassportManagerApi(); - - /** - * 地图图层控制接口 - * - * @return - */ - IMogoMapFrameController getMapFrameControllerApi(); - } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java index 1b037af306..f1b21b2ed8 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java @@ -21,10 +21,7 @@ import com.mogo.service.impl.imageloader.glide.GlideImageLoader; import com.mogo.service.impl.intent.IntentManager; import com.mogo.service.impl.singleton.SingletonsHolder; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.map.IMogoMapFrameController; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; -import com.mogo.service.module.IMogoMarkerService; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -71,11 +68,6 @@ public class MogoServiceApis implements IMogoServiceApis { return IntentManager.getInstance(); } - @Override - public IMogoMapService getMapServiceApi() { - return SingletonsHolder.get(IMogoMapService.class); - } - @Override public IMogoNetwork getNetworkApi() { return SingletonsHolder.get(IMogoNetwork.class); @@ -127,11 +119,6 @@ public class MogoServiceApis implements IMogoServiceApis { return getApiInstance(DisplayEffectsInterface.class, MogoServicePaths.PATH_MAIN_DISPLAY_EFFECTS_MANAGER); } - @Override - public IMogoMarkerService getMarkerService() { - return getApiInstance(IMogoMarkerService.class, MogoServicePaths.PATH_MARKER_SERVICE); - } - @Override public IMogoLocationInfoService getLocationInfoApi() { return getApiInstance(IMogoLocationInfoService.class, MogoServicePaths.PATH_LOCATION_INFO); @@ -142,11 +129,6 @@ public class MogoServiceApis implements IMogoServiceApis { return getApiInstance(IMogoPassportManager.class, MogoServicePaths.PATH_PASSPORT); } - @Override - public IMogoMapFrameController getMapFrameControllerApi() { - return getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER); - } - private static T getApiInstance(Class clazz, String path) { T inst = SingletonsHolder.get(clazz); if (inst == null) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java index 331b20af6b..27e9d38f5e 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java @@ -5,10 +5,8 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.service.datamanager.IMogoDataManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.impl.fragmentmanager.MogoFragmentManager; -import com.mogo.service.impl.map.MogoMapService; import com.mogo.service.impl.network.MogoNetWorkService; import com.mogo.service.impl.statusmanager.MogoStatusManager; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -29,7 +27,6 @@ public class SingletonsHolder { static { sSingletons.put(IMogoFragmentManager.class, new MogoFragmentManager()); - sSingletons.put(IMogoMapService.class, new MogoMapService()); sSingletons.put(IMogoNetwork.class, new MogoNetWorkService()); sSingletons.put(IMogoStatusManager.class, new MogoStatusManager()); sSingletons.put(IMogoDataManager.class, ARouter.getInstance().navigation(IMogoDataManager.class)); diff --git a/settings.gradle b/settings.gradle index 2fe6044a80..a4e3c5175e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -58,7 +58,6 @@ include ':foudations:mogo-commons' // 基础库 include ':libraries:map-usbcamera' -include ':libraries:map-custom' include ':libraries:mogo-map-api' include ':libraries:mogo-map' include ':libraries:mogo-adas'