diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index 2a112d9695..7acfdfc948 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -22,6 +22,7 @@ import androidx.constraintlayout.widget.Group; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; @@ -29,6 +30,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListener 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.CallerMapUIServiceManager; +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager; import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView; import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView; import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView; @@ -38,6 +40,7 @@ import com.mogo.eagle.core.function.view.MapBizView; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.listener.MogoMapListenerHandler; import com.mogo.map.uicontroller.IMogoMapUIController; @@ -51,6 +54,8 @@ import com.mogo.och.common.module.utils.SoundPoolHelper; import org.greenrobot.eventbus.EventBus; +import java.util.Objects; + import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; @@ -141,10 +146,18 @@ public abstract class BaseBusTabFragment if (controller != null) { //切换地图的远近视图 if (controller.getCurrentMapVisualAngle().isLongSight()) { + CallerVisualAngleManager.INSTANCE.updateLongSightLevel(false); + Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true); controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium); } else if (controller.getCurrentMapVisualAngle().isMediumSight()) { - controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); + CallerVisualAngleManager.INSTANCE.updateLongSightLevel(true); + if (FunctionBuildConfig.isRomaMode) { + controller.setRomaMode(1); + } else { + Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false); + controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); + } mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long); } else { controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java index 122346666d..213ab2d358 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java @@ -1,5 +1,7 @@ package com.mogo.och.taxi.passenger.model; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + import android.content.Context; import com.amap.api.services.core.AMapException; @@ -17,8 +19,6 @@ import java.util.List; import java.util.Timer; import java.util.TimerTask; -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - /** * @author: wangmingjun * @date: 2021/12/6 diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index 8d8460ae23..b09650e4d3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -14,10 +14,12 @@ import androidx.fragment.app.FragmentTransaction; import com.mogo.commons.module.status.MogoStatusManager; import com.mogo.commons.mvp.MvpFragment; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.call.map.CallerSmpManager; +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager; import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView; import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxButtonView; import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxListView; @@ -40,6 +42,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.lang.ref.WeakReference; +import java.util.Objects; /** @@ -147,10 +150,18 @@ public class TaxiPassengerBaseFragment extends MvpFragment): BaseResponse //获取前方红绿灯状态 @FormUrlEncoded - @POST("mec-etl-server/light/bgd/channel/realTime") + @POST("eagle-eye-dns/mec-etl-server/light/bgd/channel/realTime") suspend fun getTrafficLight(@FieldMap status: Map): BaseResponse //变灯 @FormUrlEncoded - @POST("mec-etl-server/light/bdg/newTask") + @POST("eagle-eye-dns/mec-etl-server/light/bdg/newTask") suspend fun changeLight(@FieldMap turnLight: Map): BaseResponse } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/trafficlight/network/TrafficLightNetWorkModel.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/trafficlight/network/TrafficLightNetWorkModel.kt index e537960c39..fb54d5cda1 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/trafficlight/network/TrafficLightNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/trafficlight/network/TrafficLightNetWorkModel.kt @@ -1,18 +1,18 @@ package com.mogo.eagle.function.biz.v2x.trafficlight.network import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.constants.HostConst import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.trafficlight.* import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.network.apiCall import com.mogo.eagle.core.network.cancel import com.mogo.eagle.core.network.request -import com.mogo.commons.constants.HostConst.CITY_HOST import com.mogo.eagle.core.utilcode.util.GsonUtils class TrafficLightNetWorkModel { - private fun getNetWorkApi(baseUrl: String = CITY_HOST): TrafficLightApiService { + private fun getNetWorkApi(baseUrl: String = HostConst.getEagleHost()): TrafficLightApiService { return MoGoRetrofitFactory.getInstanceNoCallAdapter(baseUrl) .create(TrafficLightApiService::class.java) } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipApiService.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipApiService.kt index 1bc23b7452..db9077191b 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipApiService.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipApiService.kt @@ -7,7 +7,7 @@ import retrofit2.http.* interface VipApiService { //查询是否为VIP车辆 - @GET("/dataService/carUser/getVipStatusBySn") + @GET("eagle-eye-dns/dataService/carUser/getVipStatusBySn") suspend fun requestVip(@Query("sn") sn: String): BaseResponse } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipNetWorkModel.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipNetWorkModel.kt index f161184cdc..cb1600345c 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/vip/network/VipNetWorkModel.kt @@ -1,17 +1,17 @@ package com.mogo.eagle.function.biz.v2x.vip.network import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.constants.HostConst import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.v2x.VipRequest import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.network.apiCall import com.mogo.eagle.core.network.request -import com.mogo.commons.constants.HostConst.DATA_SERVICE_HOST class VipNetWorkModel { - private fun getNetWorkApi(baseUrl: String = DATA_SERVICE_HOST): VipApiService { + private fun getNetWorkApi(baseUrl: String = HostConst.getEagleHost()): VipApiService { return MoGoRetrofitFactory.getInstanceNoCallAdapter(baseUrl) .create(VipApiService::class.java) } diff --git a/core/function-impl/mogo-core-function-datacenter/README.md b/core/function-impl/mogo-core-function-datacenter/README.md index 9591c43e02..b17a6584f3 100644 --- a/core/function-impl/mogo-core-function-datacenter/README.md +++ b/core/function-impl/mogo-core-function-datacenter/README.md @@ -44,7 +44,7 @@ MogoObuManager.getInstance().init(Context context); ``` ## 连接 ```java -//默认192.168.8.199 +//默认192.168.1.199 MogoObuManager.getInstance().connect(); //自定义 IP MogoObuManager.getInstance().connect(String ip); diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 5e817bc880..ed3c13babb 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -526,16 +526,6 @@ class MoGoAdasListenerImpl : OnAdasListener { } } - /** - * OBU预警事件 - * - * @param header 头 - * @param obuWarningData 数据 - */ - override fun onObuWarningData(header: MessagePad.Header?, obuWarningData: ObuWarningEvent.ObuWarningData?) { - CallerObuDcCombineListenerManager.invokeObuDcData(obuWarningData) - } - /** * OBU 红绿灯预警信息 * diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt index 1f8d1db634..c66bdb3f4c 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt @@ -16,7 +16,9 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuLocationWGS84ListenerManager import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr -import com.mogo.eagle.core.utilcode.util.* +import com.mogo.eagle.core.utilcode.util.CoordinateTransform +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.Utils import com.mogo.support.obu.model.MogoObuHvBasicsData import mogo.telematics.pad.MessagePad @@ -86,6 +88,11 @@ object MoGoLocationDispatcher : lastGnssLocation.lastReceiveTime = TimeUtils.getNowMills() // 将高德中的一些用于业务的数据进行融合,例如:CityCode、address等 mapLocation?.let { + //agps 高德 + //agps_rtk 高德-高精 + lastGnssLocation.locType = 1000 // 定位类型为WGS84进行转译的坐标 + lastGnssLocation.satellite = 4 + lastGnssLocation.cityName = it.city lastGnssLocation.cityCode = it.cityCode lastGnssLocation.provider = it.provider @@ -142,6 +149,9 @@ object MoGoLocationDispatcher : lastGaoDeLocation.satelliteTime = it.time lastGaoDeLocation.lastReceiveTime = TimeUtils.getNowMills() + lastGaoDeLocation.locType = 1 // 定位类型为高德坐标(网路或者硬件定位) + lastGaoDeLocation.satellite = 4 + lastGaoDeLocation.cityName = it.city lastGaoDeLocation.cityCode = it.cityCode lastGaoDeLocation.provider = it.provider @@ -225,6 +235,11 @@ object MoGoLocationDispatcher : // 将高德中的一些用于业务的数据进行融合,例如:CityCode、address等 mapLocation?.let { + //agps 高德 + //agps_rtk 高德-高精 + lastOBULocation.locType = 1000 // 定位类型为WGS84进行转译的坐标 + lastOBULocation.satellite = 4 + lastOBULocation.cityName = it.city lastOBULocation.cityCode = it.cityCode lastOBULocation.provider = it.provider diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt index cc09c18978..29eb90cdbc 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt @@ -22,8 +22,7 @@ class MoGoObuProvider : IMoGoObuProvider { private val TAG = "MoGoObuProvider" private var mContext: Context? = null - private val busObuIp = "192.168.8.199" - private val taxiObuIp = "192.168.1.199" + private val taxiObuIp = "192.168.1.199" //obu的taxi和bus的ip已经全部统一成1网段ip override val functionName: String get() = TAG @@ -38,35 +37,16 @@ class MoGoObuProvider : IMoGoObuProvider { CallerLogger.d("$M_OBU$TAG", "初始化蘑菇自研OBU…… localIp = " + CommonUtils.getLocalIPAddress()) //bus乘客版本obu功能去掉,大理项目需要全部车辆接收,不在限制 -// if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) -// && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -// ) { -// //不处理 -// } else { - mContext = context - mContext?.let { - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { //bus 司机端 - val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, busObuIp) - - //mogo obu - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - ipAddress, - CommonUtils.getIpAddressString() - ) - } else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { //taxi 司机端和乘客端 - val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) - //mogo obu - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - ipAddress, - CommonUtils.getIpAddressString() - ) - } - } -// } + mContext = context + mContext?.let { + val ipAddress = SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) + //mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + ipAddress, + CommonUtils.getIpAddressString() + ) + } } /** diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 6d32280c78..7177fa3033 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -148,6 +148,10 @@ class DevaToolsProvider : IDevaToolsProvider { upgradeManager.downLoadPackage(mContext!!, downloadKey, downloadUrl) } + override fun updateUpgradeProgress() { + upgradeManager.updateUpgradeProgress(mContext!!) + } + override fun showStatusBar(ctx: Context, container: ViewGroup) { StatusManager.init(ctx) StatusManager.show(container) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/repository/net/api/BadCaseApi.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/repository/net/api/BadCaseApi.kt index 18a9d7d7cd..d87b6b61f5 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/repository/net/api/BadCaseApi.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/repository/net/api/BadCaseApi.kt @@ -8,9 +8,9 @@ import retrofit2.http.* internal interface BadCaseApi { @FormUrlEncoded - @POST("/yycp-vehicle-management-service/tool/badcase/add/v2") + @POST("eagle-eye-dns/yycp-vehicle-management-service/tool/badcase/add/v2") suspend fun post(@FieldMap map: Map): Response - @GET("/yycp-vehicle-management-service/tool/badcase/reasons") + @GET("eagle-eye-dns/yycp-vehicle-management-service/tool/badcase/reasons") suspend fun get(@Query("channel", encoded = true) channel: String, @Query("pageNo") pageNo: Int): Response } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt index 9646a3959e..316bb35fec 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt @@ -17,6 +17,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.zhjt.mogo_core_function_devatools.upgrade.IPCUpgradeManager.Companion.ipcUpgradeManager +import com.zhjt.mogo_core_function_devatools.upgrade.ObuUpgradeAppNetWorkManager import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeAppNetWorkManager import mogo.telematics.pad.MessagePad @@ -160,4 +161,13 @@ class BindingCarManager : IMoGoAutopilotCarConfigListener { .getAppUpgradeInfo(mContext, mAddress, role.toString() + "") } -} \ No newline at end of file + /** + * 司机屏 处理obu升级即可,乘客屏不需要处理 TODO OBU的角色 + * + */ + fun queryObuUpgrade() { + ObuUpgradeAppNetWorkManager.getInstance().getObuUpgradeInfo(mContext, mAddress, role.toString() + "") + } + +} + diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangManager.kt index 5f53b76eae..23a07755f4 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangManager.kt @@ -8,7 +8,7 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import com.mogo.eagle.core.data.mofang.MfConstants -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.updateMfStatusView +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager.invokeMoFangStatus import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_F import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr @@ -96,7 +96,7 @@ class MoFangManager private constructor() { BluetoothDevice.ACTION_ACL_CONNECTED -> { //蓝牙设备已连接 if (!isMfConnect) { // showBondedDevice(mBluetoothAdapter) - updateMfStatusView(TAG, true) + invokeMoFangStatus(true) isMfConnect = true mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean(MfConstants.BLUETOOTH_STATUS, true) } } @@ -106,7 +106,7 @@ class MoFangManager private constructor() { BluetoothDevice.ACTION_ACL_DISCONNECTED -> { //蓝牙设备已断开 主动更新 CallerLogger.d("$M_F${TAG}","bluetoothMonitorReceiver ACTION_ACL_DISCONNECTED ----- isMfConnect = $isMfConnect ") if (isMfConnect) { - updateMfStatusView(TAG, false) + invokeMoFangStatus(false) isMfConnect = false mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean(MfConstants.BLUETOOTH_STATUS, false) } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java new file mode 100644 index 0000000000..c323d84c9e --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java @@ -0,0 +1,95 @@ +package com.zhjt.mogo_core_function_devatools.upgrade; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BINDING; + +import android.content.Context; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.constants.HostConst; +import com.mogo.eagle.core.data.bindingcar.UpgradeAppInfo; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.network.MoGoRetrofitFactory; +import com.mogo.eagle.core.network.utils.GsonUtil; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.AppUtils; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; +import okhttp3.MediaType; +import okhttp3.RequestBody; + +/** + * @author lixiaopeng + * @description 获取obu升级信息 + * @since: 3/25/22 + */ +public class ObuUpgradeAppNetWorkManager { + private static volatile ObuUpgradeAppNetWorkManager requestNoticeManager; + private final UpgradeApiService mUpgradeApiService; + private static final String TAG = "ObuUpgrade"; + + private ObuUpgradeAppNetWorkManager() { + mUpgradeApiService = MoGoRetrofitFactory.getInstance(HostConst.getHost()) + .create(UpgradeApiService.class); + } + + public static ObuUpgradeAppNetWorkManager getInstance() { + if (requestNoticeManager == null) { + synchronized (ObuUpgradeAppNetWorkManager.class) { + if (requestNoticeManager == null) { + requestNoticeManager = new ObuUpgradeAppNetWorkManager(); + } + } + } + return requestNoticeManager; + } + + /** + * 获取obu升级信息 + * mac :工控机mac地址 + * screenType : 类型 + */ + public void getObuUpgradeInfo(Context context, String mac, String screenType) { +// String sn = "X20202203105S688HZ"; +// String mac = "48:b0:2d:3a:bc:78"; + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + int versionCode = AppUtils.getAppVersionCode(); + CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo mac = " + mac + "---type = " + screenType + "---sn = " + sn + "---versionCode =" + versionCode); + UpgradeAppRequest request = new UpgradeAppRequest(sn, mac, screenType); + RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); + mUpgradeApiService.getUpgradeInfo(requestBody) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + } + + @Override + public void onNext(@NonNull UpgradeAppInfo info) { + if (info != null && info.result != null) { + CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo url = " + info.result.getAppUrl() + "----code = " + info.result.getVersionCode() + "--versionCode =" + versionCode + "--info.result = " + info.result); + if (info.result.getVersionCode() > versionCode) { + CallerHmiManager.INSTANCE.showUpgradeDialog(info.result.getAppUrl().substring(info.result.getAppUrl().lastIndexOf("/")+1), info.result.getAppUrl(), info.result.getInstallTitle(), info.result.getInstallContent(), info.result.getInstallType()); + } + } else { + CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo onNext info == null"); + } + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + } + }); + + } + +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt index a180eb61f9..e880c59532 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt @@ -1,7 +1,12 @@ package com.zhjt.mogo_core_function_devatools.upgrade +import android.app.NotificationManager import android.content.Context +import androidx.core.app.NotificationCompat +import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.function.api.devatools.IMogoDevaToolsUpgradeListener import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsUpgradeListenerManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.updateStatusBarDownloadView import com.mogo.eagle.core.utilcode.breakpoint.Config import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload @@ -110,4 +115,36 @@ class UpgradeManager : IDownload { } } } + + fun updateUpgradeProgress(context: Context) { + val builder = NotificationCompat.Builder(context) + // builder.setSmallIcon(R.mipmap.icon1001);//todo emArrow 更换图标,去除地图下载图标的依赖关系 + builder.setContentTitle("下载") + builder.setContentText("正在下载") + val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + CallerDevaToolsUpgradeListenerManager.addListener( + TAG, + object : IMogoDevaToolsUpgradeListener { + override fun onStart(url: String?) {} + override fun onPause(url: String?) {} + override fun onProgress(url: String?, length: Int) { + builder.setProgress(100, length, false) + manager.notify(0x3, builder.build()) + //下载进度提示 + builder.setContentText("已下载$length%") + updateStatusBarDownloadView(true, "download", length) + } + + override fun onFinished(url: String?) { + builder.setContentText("已下载" + 100 + "%") + UiThreadHandler.postDelayed({ + manager.cancel(0x3) + updateStatusBarDownloadView(false, "download", 100) + }, 1000) + } + + override fun onError(url: String?, errorMsg: String?) {} + }) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index 5f9b7787b9..39490b0d6c 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -80,18 +80,17 @@ dependencies { if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { compileOnly rootProject.ext.dependencies.mogocommons - compileOnly rootProject.ext.dependencies.mogo_core_res + api rootProject.ext.dependencies.mogo_core_res compileOnly rootProject.ext.dependencies.mogo_core_utils compileOnly rootProject.ext.dependencies.mogo_core_function_datacenter compileOnly rootProject.ext.dependencies.mogo_core_function_call compileOnly project(':libraries:mogo-adas') } else { - api project(':test:crashreport-upgrade') api project(':test:crashreport-apmbyte') compileOnly project(':core:function-impl:mogo-core-function-datacenter') compileOnly project(':foudations:mogo-commons') - compileOnly project(':core:mogo-core-res') + api project(':core:mogo-core-res') compileOnly project(':core:mogo-core-utils') compileOnly project(':core:mogo-core-function-call') compileOnly project(':libraries:mogo-adas') diff --git a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml index adb96a5a4e..d63465a300 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml @@ -1,7 +1,24 @@ + + + + + + + + + + + + + + @@ -39,6 +56,7 @@ android:clearTaskOnLaunch="${ACTIVITY_ROOT}" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize" android:enabled="true" + android:hardwareAccelerated="true" android:launchMode="singleTop" android:resizeableActivity="false" android:resumeWhilePausing="true" @@ -119,6 +137,16 @@ + + + + + + + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index d9bc93a359..406fdd97ee 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -87,10 +87,6 @@ class MoGoHmiProvider : IMoGoHmiProvider { ) } - override fun updateMfStatus(tag: String, status: Boolean) { - CallerHmiViewControlListenerManager.updateMfStatus(StatusBarView.TAG, tag, status) - } - /** * 不展示顶部弹窗,其它保留 */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 21d831a626..6ea3a5d346 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -629,6 +629,33 @@ internal class DebugSettingView @JvmOverloads constructor( } } + tbV2NFromCar.isChecked = FunctionBuildConfig.isV2NFromCar + //v2n车端预警 + tbV2NFromCar.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isV2NFromCar = isChecked + if (!FunctionBuildConfig.isV2NFromCar) { + tbV2NFromCar.isChecked = false + } + } + + tbDrawAiCloudFusion.isChecked = FunctionBuildConfig.isDrawAiCloudFusion + //云端感知绘制 + tbDrawAiCloudFusion.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isDrawAiCloudFusion = isChecked + if (!FunctionBuildConfig.isDrawAiCloudFusion) { + tbDrawAiCloudFusion.isChecked = false + } + } + + tbDrawRomaMode.isChecked = FunctionBuildConfig.isRomaMode + //roma + tbDrawRomaMode.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isRomaMode = isChecked + if (!FunctionBuildConfig.isRomaMode) { + tbDrawRomaMode.isChecked = false + } + } + //重启工控机所有节点 btnIpcReboot.onClick { CallerAutoPilotControlManager.sendIpcReboot() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index 0569eda8fe..6327b04bed 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -175,11 +175,7 @@ internal class SOPSettingView @JvmOverloads constructor( tbObu.isChecked = CallerObuApiManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> if (!isChecked) { - if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { - CallerObuApiManager.resetObuIpAddress("192.168.1.199") - } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - CallerObuApiManager.resetObuIpAddress("192.168.8.199") - } + CallerObuApiManager.resetObuIpAddress("192.168.1.199") } else { //断开链接 CallerObuApiManager.disConnectObu() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt index 817dbe4c20..67c43f6f1f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt @@ -77,8 +77,11 @@ class PncActionsView @JvmOverloads constructor( UiThreadHandler.post { var actions: String? = null planningActionMsg.actionMsg?.let { it -> - actions = PncActionsHelper.getAction(it.drivingState.number, it.drivingAction.number) - + try { + actions = PncActionsHelper.getAction(it.drivingState.number, it.drivingAction.number) + } catch (e:Exception){ + e.printStackTrace() + } //如果是存在云端红绿灯数据条件下,设置云端数据 if (PncActionsHelper.isWaitingTrafficlight(it.drivingState.number, it.drivingAction.number) && mTrafficLightResult != null diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt index 85649ffa64..3ed347d792 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt @@ -4,7 +4,13 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.RelativeLayout +import com.mogo.eagle.core.data.mofang.MfConstants +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import kotlinx.android.synthetic.main.view_blue_tooth.view.* +import kotlinx.android.synthetic.main.view_status_bar.view.* /** * 魔戒蓝牙控件 @@ -14,10 +20,38 @@ class BlueToothView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : RelativeLayout(context, attrs, defStyleAttr) { +) : RelativeLayout(context, attrs, defStyleAttr),IMoGoDevaToolsListener { + + companion object{ + private const val TAG = "BlueToothView" + } init { LayoutInflater.from(context).inflate(R.layout.view_blue_tooth, this, true) } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val isBluetoothConnect = + SharedPrefsMgr.getInstance(context).getBoolean(MfConstants.BLUETOOTH_STATUS, false) + if (isBluetoothConnect) { + mofangStatus(true) + } + CallerDevaToolsListenerManager.addListener(TAG, this) + } + + override fun mofangStatus(status: Boolean) { + super.mofangStatus(status) + if (status) { + mofangView.setImageResource(R.drawable.icon_bluetooth_p) + } else { + mofangView.setImageResource(R.drawable.blue_tooth) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerDevaToolsListenerManager.removeListener(TAG) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt index 3aad68006d..f6cd1d826a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt @@ -7,14 +7,12 @@ import android.view.LayoutInflater import android.view.ViewGroup import android.widget.LinearLayout import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.data.mofang.MfConstants import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import kotlinx.android.synthetic.main.view_status_bar.view.* import java.util.concurrent.CopyOnWriteArrayList @@ -39,11 +37,6 @@ class StatusBarView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() viewStatusBarRight.addView(BatteryGroupView(this.context)) - val isBluetoothConnect = - SharedPrefsMgr.getInstance(context).getBoolean(MfConstants.BLUETOOTH_STATUS, false) - if (isBluetoothConnect) { - updateMfStatus("MoFangManager", true) - } //添加view控制 CallerHmiViewControlListenerManager.addListener(TAG,this) @@ -106,14 +99,6 @@ class StatusBarView @JvmOverloads constructor( } } - override fun updateMfStatus(tag: String, status: Boolean) { - if (status) { - viewMofangStatus.setImageResource(R.drawable.icon_bluetooth_p) - } else { - viewMofangStatus.setImageResource(R.drawable.blue_tooth) - } - } - private fun setTextColor(color: Int) { viewTextClock.setTextColor(color) viewStatusBarTag.setTextColor(color) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt index 9ecca9d6e0..28f464b10f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt @@ -11,7 +11,9 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.main.AppListActivity import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import kotlinx.android.synthetic.main.view_version_name.view.* @@ -44,6 +46,12 @@ class VersionNameView @JvmOverloads constructor( showCurrentPadVersion() showCurrentMapVersion() } + + // 调试入口,应对M1、M2没有安装Launcher的情况 + setOnLongClickListener { + ActivityUtils.startActivity(AppListActivity::class.java) + true + } } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/AppListActivity.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/AppListActivity.kt new file mode 100644 index 0000000000..5a3c439d36 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/AppListActivity.kt @@ -0,0 +1,40 @@ +package com.mogo.eagle.core.function.main + +import android.os.Bundle +import android.view.WindowManager +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.GridLayoutManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.main.adapter.AppListAdapter +import com.mogo.eagle.core.utilcode.util.ActivityUtils +import com.mogo.eagle.core.utilcode.util.BarUtils +import kotlinx.android.synthetic.main.activity_app_list.* + + +/** + * 系统应用列表,调试使用,暂不对外显示开放,只通过隐藏后门进入 + */ +class AppListActivity : AppCompatActivity(), AppListAdapter.OnItemClickedListener { + override fun onCreate(savedInstanceState: Bundle?) { + BarUtils.hideStatusBarAndSticky(this.window) + window.setFlags( + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + ) + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_app_list) + + val linearLayoutManager = GridLayoutManager(this, 6) //第二个参数为网格的列数 + recyclerViewAppList.layoutManager = linearLayoutManager + + recyclerViewAppList.itemAnimator = DefaultItemAnimator() + val appListAdapter = + AppListAdapter(this) + recyclerViewAppList.adapter = appListAdapter + } + + override fun onItemClicked(appListAdapter: AppListAdapter, position: Int) { + ActivityUtils.startLauncherActivity(appListAdapter.getItem(position).packageName) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt index 01cd77d9ef..c89b6e88e5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt @@ -104,7 +104,7 @@ open class MainActivity : MvpActivity(), MainView, decorView.clipToPadding = false var statusBarView = decorView.findViewWithTag("status_bar") if (statusBarView == null) { - statusBarView = StatusBarView(this) + statusBarView = statusBar statusBarView.setTag("status_bar") } val statusBarLP = FrameLayout.LayoutParams( @@ -117,10 +117,10 @@ open class MainActivity : MvpActivity(), MainView, } /** - * 修改statusBar 重写实现,需要继承 StatusBarView,xml中基础系统控件不要修改其id,拿来即用 + * 修改statusBar重新赋值 * @return StatusBarView */ - protected val statusBarView: StatusBarView + protected val statusBar: View get() = StatusBarView(this) override fun onCreate(savedInstanceState: Bundle?) { @@ -353,30 +353,4 @@ open class MainActivity : MvpActivity(), MainView, } } - /** - * 由于应用是单页面的,所以采用Fragment将各模块的UI进行分割解耦合 - * - * @param newFragment 功能UI - * @param tagName UI绑定的Tag - * @param containerId 要加入的资源ID - */ - private fun addFragment(newFragment: Fragment, tagName: String, containerId: Int) { - var fragment = supportFragmentManager.findFragmentByTag(tagName) - if (fragment == null) { - fragment = newFragment - } - if (fragment == null) { - e( - SceneConstant.M_HMI + TAG, - "add fragment fail cause fragment == null, container is " + ResourcesHelper.getResNameById( - applicationContext, containerId - ) - ) - return - } - supportFragmentManager.beginTransaction() - .replace(containerId, fragment, tagName) - .commitAllowingStateLoss() - } - } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index a7c962f6e9..a80465d6a3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -31,6 +31,7 @@ import com.mogo.eagle.core.function.hmi.R; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; 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.ActivityUtils; import com.mogo.eagle.core.utilcode.util.MultiDisplayUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; @@ -91,6 +92,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override protected void onResume() { super.onResume(); + ActivityUtils.setDefaultL(this); } @Override diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index 684940db25..bcdd678bd5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -55,14 +55,11 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { return; } start = System.currentTimeMillis(); - connectAmiIp(); // Crash 日志收集 initCrashConfig(); initLogConfig(); initTipToast(); initModules(); - //查询是否有版本的更新 - queryAppUpgrade(); if (ProcessUtils.isMainProcess(this)) { initOverviewDb(); if (DebugConfig.isDebug()) { @@ -71,7 +68,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { clearMessageBoxTable(); CallerMsgBoxManager.INSTANCE.queryAllMessages(this); } - upgradeProgressListener(); + CallerDevaToolsManager.INSTANCE.updateUpgradeProgress(); } @Override @@ -80,15 +77,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { return true; } - private void queryAppUpgrade() { - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - CallerDevaToolsManager.INSTANCE.queryAppUpgrade(); - } - },9000); - } - @SuppressLint("SimpleDateFormat") private void clearMessageBoxTable() { new Thread(() -> { @@ -121,52 +109,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { }).start(); } - private void upgradeProgressListener() { - final NotificationCompat.Builder builder = new NotificationCompat.Builder(this); -// builder.setSmallIcon(R.mipmap.icon1001);//todo emArrow 更换图标,去除地图下载图标的依赖关系 - builder.setContentTitle("下载"); - builder.setContentText("正在下载"); - final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - - CallerDevaToolsUpgradeListenerManager.INSTANCE.addListener(TAG, new IMogoDevaToolsUpgradeListener() { - @Override - public void onStart(@Nullable String url) { - - } - - @Override - public void onPause(@Nullable String url) { - - } - - @Override - public void onProgress(@Nullable String url, int length) { - builder.setProgress(100, length,false); - manager.notify(0x3, builder.build()); - //下载进度提示 - builder.setContentText("已下载" + length + "%"); - CallerHmiManager.INSTANCE.updateStatusBarDownloadView(true, "download", length); - } - - @Override - public void onFinished(@Nullable String url) { - builder.setContentText("已下载" + 100 + "%"); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - manager.cancel(0x3); - CallerHmiManager.INSTANCE.updateStatusBarDownloadView(false, "download", 100); - } - }, 1000); - } - - @Override - public void onError(@Nullable String url, @Nullable String errorMsg) { - - } - }); - } - private void initKoom() { KoomInitTask.INSTANCE.init(this); } @@ -197,14 +139,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { CallerFuncBizManager.getBizProvider().initOverViewDb(this); } - /** - * 连接ami - */ - private void connectAmiIp() { - String ipAddress = SharedPrefsMgr.getInstance(AbsMogoApplication.getApp().getBaseContext()).getString(MoGoConfig.OBU_IP, "192.168.1.199"); -// AmiClientManager.getInstance().setObuIp(ipAddress); - } - private void initModules() { CallerLogger.INSTANCE.d(M_HMI + TAG, "initModules"); // OBU 模块 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/adapter/AppListAdapter.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/adapter/AppListAdapter.java new file mode 100644 index 0000000000..43db1fc7e3 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/adapter/AppListAdapter.java @@ -0,0 +1,92 @@ +package com.mogo.eagle.core.function.main.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mogo.eagle.core.function.hmi.R; +import com.mogo.eagle.core.utilcode.util.AppUtils; + +import java.util.ArrayList; +import java.util.List; + + +public class AppListAdapter extends RecyclerView.Adapter { + private OnItemClickedListener mOnItemClickedListener; + + public interface OnItemClickedListener { + void onItemClicked(AppListAdapter appListAdapter, int position); + } + + public static class AppViewHolder extends RecyclerView.ViewHolder { + public ImageView iconIv; + public TextView nameTv; + + public AppViewHolder(View itemView) { + super(itemView); + iconIv = (ImageView) itemView.findViewById(R.id.list_item_app_icon_iv); + nameTv = (TextView) itemView.findViewById(R.id.list_item_app_name_tv); + } + } + + private ArrayList showApps = new ArrayList<>(); + + public AppListAdapter(OnItemClickedListener onItemClickedListener) { + // 设置被允许展示的APP + showApps.add("com.android.settings"); + + mOnItemClickedListener = onItemClickedListener; + mApps = new ArrayList<>(); + for (AppUtils.AppInfo appInfo : AppUtils.getAppsInfo()) { + if (!appInfo.isSystem()) { + mApps.add(appInfo); + } else { + if (showApps.contains(appInfo.getPackageName())) { + mApps.add(appInfo); + } + } + } + } + + private List mApps; + + public AppUtils.AppInfo getItem(int position) { + return mApps.get(position); + } + + @Override + public int getItemCount() { + return mApps.size(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false); + return new AppViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + AppViewHolder itemViewHolder = (AppViewHolder) holder; + itemViewHolder.iconIv.setImageDrawable(mApps.get(position).getIcon()); + itemViewHolder.nameTv.setText(mApps.get(position).getName()); + itemViewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickedListener != null) { + mOnItemClickedListener.onItemClicked(AppListAdapter.this, position); + } + } + }); + } +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/activity_app_list.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/activity_app_list.xml new file mode 100644 index 0000000000..7919759222 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/activity_app_list.xml @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_app_list.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_app_list.xml new file mode 100644 index 0000000000..05b6631dc0 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_app_list.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml index e5e6fcb799..e85165ffca 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml @@ -5,10 +5,11 @@ android:layout_height="@dimen/dp_54"> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index 68ffc3415d..3aad4d8c8f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -242,6 +242,42 @@ android:textOn="关闭感知优化模式" android:textSize="@dimen/dp_24" /> + + + + + + + - + package="com.mogo.eagle.core.function.map"> + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt index e1c4c357e7..eefc61d621 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt @@ -2,10 +2,12 @@ package com.mogo.eagle.core.function import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider import com.mogo.eagle.core.function.business.MapPointCloudSubscriber import com.mogo.eagle.core.function.business.SpeedLimitDataManager +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.aiCloudIdentifyDataManager import com.mogo.eagle.core.function.business.identify.MapIdentifySubscriber import com.mogo.eagle.core.function.business.routeoverlay.MogoRouteOverlayManager @@ -20,6 +22,7 @@ class MapBizProvider :IMoGoFunctionServerProvider{ MogoRouteOverlayManager.getInstance().init() MapPointCloudSubscriber.instance SpeedLimitDataManager.getInstance().start() + aiCloudIdentifyDataManager.init(AbsMogoApplication.getApp()) } override fun onDestroy() { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt new file mode 100644 index 0000000000..0393e027bb --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt @@ -0,0 +1,91 @@ +package com.mogo.eagle.core.function.business.ai + +import android.content.Context +import com.mogo.aicloud.services.socket.IMogoOnMessageListener +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.function.business.ai.net.AiCloudIdentifyNetWorkModel +import com.mogo.eagle.core.function.business.identify.MapIdentifySubscriber +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP +import com.mogo.map.listener.IMogoMapListener +import com.mogo.map.uicontroller.VisualAngleMode +import mogo.yycp.api.proto.SocketDownData + +class AiCloudIdentifyDataManager : IMogoMapListener { + + companion object { + private const val TAG = "AiCloudIdentifyData" + + var START_METRE = 200 + var END_METRE = 2000 + + @JvmStatic + val aiCloudIdentifyDataManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + AiCloudIdentifyDataManager() + } + } + + private val aiCloudIdentifyNetWorkModel = AiCloudIdentifyNetWorkModel() + private var showAiCloud = false + + fun init(mContext: Context) { + MogoAiCloudSocketManager.getInstance(mContext) + .registerOnMessageListener( + 0x040003, //低频数据 + object : IMogoOnMessageListener { + override fun target(): Class { + return SocketDownData.SocketDownDataProto::class.java + } + + override fun onMsgReceived(obj: SocketDownData.SocketDownDataProto?) { + if (!FunctionBuildConfig.isDrawAiCloudFusion) { + MapIdentifySubscriber.instance.clearAiCloudRoma() + return + } + obj?.let { + obj.data?.let { + if (showAiCloud) { + if (it.allListList == null || it.allListList.size == 0) { + MapIdentifySubscriber.instance.clearAiCloudRoma() + return + } + MapIdentifySubscriber.instance.renderAiCloudResult(it.allListList) + } + } + } + } + }) + requestRangeOfIdentify() + } + + fun requestRangeOfIdentify() { + aiCloudIdentifyNetWorkModel.requestIdentifyRange({ + CallerLogger.d( + M_MAP + TAG, + "requestIdentifyRange ok startRange:$START_METRE, endRange:$END_METRE" + ) + }, { + CallerLogger.d( + M_MAP + TAG, + "requestIdentifyRange error : $it , startRange:$START_METRE, endRange:$END_METRE" + ) + }) + } + + override fun onMapVisualAngleChanged(visualAngleMode: VisualAngleMode) { + super.onMapVisualAngleChanged(visualAngleMode) + when { + visualAngleMode.isRoma -> { + showAiCloud = true + FunctionBuildConfig.isDrawIdentifyData = false + } + else -> { + showAiCloud = false + FunctionBuildConfig.isDrawIdentifyData = true + MapIdentifySubscriber.instance.clearAiCloudRoma() + } + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudRangeBroadcastReceiver.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudRangeBroadcastReceiver.kt new file mode 100644 index 0000000000..a45ec2a068 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudRangeBroadcastReceiver.kt @@ -0,0 +1,30 @@ +package com.mogo.eagle.core.function.business.ai + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.END_METRE +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.START_METRE +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.aiCloudIdentifyDataManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP + +class AiCloudRangeBroadcastReceiver : BroadcastReceiver() { + + companion object { + private const val TAG = "AiCloudRangeBroadcastReceiver" + private const val START_RANGE = "startRange" + private const val END_RANGE = "endRange" + + // adb shell am broadcast -a com.map.aiCloud.notification --ei startRange 140 --ei endRange 2000 + } + + override fun onReceive(context: Context, intent: Intent) { + val startRange = intent.getIntExtra(START_RANGE, START_METRE) + val endRange = intent.getIntExtra(END_RANGE, END_METRE) + START_METRE = startRange + END_METRE = endRange + CallerLogger.d("$M_MAP$TAG", "startRange:$startRange, endRange:$endRange") + aiCloudIdentifyDataManager.requestRangeOfIdentify() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/AiCloudIdentifyNetWorkModel.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/AiCloudIdentifyNetWorkModel.kt new file mode 100644 index 0000000000..8ad4ad3521 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/AiCloudIdentifyNetWorkModel.kt @@ -0,0 +1,63 @@ +package com.mogo.eagle.core.function.business.ai.net + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.debug.DebugConfig +import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.END_METRE +import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.START_METRE +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.network.apiCall +import com.mogo.eagle.core.network.request +import com.zhjt.service_biz.FuncConfig + +class AiCloudIdentifyNetWorkModel { + + companion object { + val aiCloudIdentifyNetWorkModel by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + AiCloudIdentifyNetWorkModel() + } + } + + private fun getHost(): String { + var host = "http://dzt-city.zhidaozhixing.com" + when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, + DebugConfig.NET_MODE_QA -> host = "http://dzt-qa-city.zhidaozhixing.com" + } + return host + } + + private fun getNetWorkApi(baseUrl: String = getHost()): IAiCloudIdentifyApiService { + return MoGoRetrofitFactory.getInstanceNoCallAdapter(baseUrl) + .create(IAiCloudIdentifyApiService::class.java) + } + + fun requestIdentifyRange( + onSuccess: (() -> Unit), + onError: ((String) -> Unit) + ) { + request> { + val map = mutableMapOf() + start { + map["sn"] = MoGoAiCloudClientConfig.getInstance().sn + map["status"] = true + map["startMetre"] = START_METRE + map["endMetre"] = END_METRE + map["type"] = 1 + } + loader { + apiCall { + getNetWorkApi().identifyRange(map) + } + } + onSuccess { + onSuccess.invoke() + } + onError { + it.message?.let { errorMsg -> + onError.invoke(errorMsg) + } + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/IAiCloudIdentifyApiService.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/IAiCloudIdentifyApiService.kt new file mode 100644 index 0000000000..3ddaac5e43 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/net/IAiCloudIdentifyApiService.kt @@ -0,0 +1,13 @@ +package com.mogo.eagle.core.function.business.ai.net + +import com.mogo.eagle.core.data.BaseResponse +import retrofit2.http.Body +import retrofit2.http.Headers +import retrofit2.http.POST + +interface IAiCloudIdentifyApiService { + + @Headers("Content-type:application/json;charset=UTF-8") + @POST("yycp-c-v2x-service/dataFusion/remoteDrivingSet") + suspend fun identifyRange(@Body map: MutableMap): BaseResponse +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/Identify.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/Identify.kt index e3ba3c913b..24c70b58b3 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/Identify.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/Identify.kt @@ -3,16 +3,35 @@ package com.mogo.eagle.core.function.business.identify import com.mogo.eagle.core.data.traffic.TrafficData import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.TrackedObject +import mogo.yycp.api.proto.SocketDownData interface Identify { - fun renderAdasRecognizedResult(resultList: List?) + fun renderAdasRecognizedResult(resultList: List?) { - fun renderPlanningWarningObj(planningObjects: List?) + } + + fun renderAiCloudResult(resultList: List) { + + } + + fun renderPlanningWarningObj(planningObjects: List?) { + + } fun renderOBUWarningObj(exist: Boolean, obuTrafficData: TrafficData) { } - fun clearOldMarker() + fun clearOldMarker() { + + } + + fun clearAiMarker() { + + } + + fun getIdentifyObj(uuid: String): TrackedObject? { + return null + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyAiCloudDataDrawer.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyAiCloudDataDrawer.kt new file mode 100644 index 0000000000..a0a741db4a --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyAiCloudDataDrawer.kt @@ -0,0 +1,102 @@ +package com.mogo.eagle.core.function.business.identify + +import android.annotation.SuppressLint +import androidx.collection.ArraySet +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.module.status.MogoStatusManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w +import com.mogo.map.MogoMarkerManager +import mogo.yycp.api.proto.SocketDownData +import java.util.concurrent.ConcurrentHashMap + +class IdentifyAiCloudDataDrawer : Identify { + + companion object { + private const val TAG = "IdentifyDataDrawer" + } + + /** + * 上一帧数据的缓存 + */ + private val mMarkersCaches = ConcurrentHashMap() + + /** + * 记录每次实际绘制的交通元素UUID + */ + @SuppressLint("NewApi") + private val trafficDataUuidList = ArraySet() + + /** + * 过滤后的数据集合 + */ + @SuppressLint("NewApi") + private val mFilterTrafficData = HashMap() + + @SuppressLint("NewApi") + override fun renderAiCloudResult(resultList: List) { + if (resultList.isEmpty()) { + clearOldMarker() + w(TAG, "感知数据为空无需渲染……") + return + } + if (!MogoStatusManager.getInstance().isVrMode) { + clearOldMarker() + w(TAG, "渲染 adas 识别的数据 当前不是VR模式") + return + } + + //清除缓存 + for (data in resultList) { + if (trafficDataUuidList.size > 0 && trafficDataUuidList.contains("" + data.uuid)) { + trafficDataUuidList.remove("" + data.uuid) + } + } + + //清除缓存,删除marker + val it: MutableIterator<*> = trafficDataUuidList.iterator() + while (it.hasNext()) { + val key = it.next() as String + it.remove() + mMarkersCaches.remove(key) + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) + .removeMarker(key.hashCode().toString()) + } + + val filterList = filterTrafficData(resultList) + if (filterList.size > 0) { + // 绘制新数据 + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) + .updateBatchAiMarkerPosition(filterList) + } + } + + /** + * 数据过滤器 + * + * @return 过滤后的数据集合 + */ + @SuppressLint("NewApi") + private fun filterTrafficData(trafficData: List): HashMap { + mFilterTrafficData.clear() + trafficDataUuidList.clear() + for (data in trafficData) { + val uuid = "" + data.uuid + mMarkersCaches[uuid] = data + trafficDataUuidList.add(uuid) + mFilterTrafficData[uuid] = data + } + return mFilterTrafficData + } + + @SuppressLint("NewApi") + override fun clearAiMarker() { + trafficDataUuidList.clear() + mMarkersCaches.forEach { (uuid, _) -> + mMarkersCaches.remove(uuid) + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) + .removeMarker(uuid.hashCode().toString()) + } + mFilterTrafficData.clear() + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyFactory.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyFactory.kt index 9eee2c09c1..f633dc7908 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyFactory.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyFactory.kt @@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.call.obu.CallerObuWarningListenerManager import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.TrackedObject +import mogo.yycp.api.proto.SocketDownData object IdentifyFactory : Identify, IMoGoObuStatusListener { @@ -22,7 +23,12 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { internal val beautifyDataDrawer = IdentifyBeautifyDataDrawer() } + object AiIdentify { + internal val aiCloudDataDrawer = IdentifyAiCloudDataDrawer() + } + private var identify: Identify? = null + private var aiCloudIdentify: Identify? = null init { identify = if (FunctionBuildConfig.isBeautyMode) { @@ -30,14 +36,17 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { } else { DriverIdentify.originDataDrawer } + aiCloudIdentify = AiIdentify.aiCloudDataDrawer CallerObuWarningListenerManager.addListener(TAG, this) } private const val MSG_DATA_TRACK = 0 - private const val MSG_DATA_WARNING = 1 - private const val MSG_DATA_OBU_WARNING_UPDATE = 2 - private const val MSG_DATA_OBU_WARNING_REMOVE = 3 - private const val MSG_DATA_CLEAR = 4 + private const val MSG_DATA_AI_TRACK = 1 + private const val MSG_DATA_WARNING = 2 + private const val MSG_DATA_OBU_WARNING_UPDATE = 3 + private const val MSG_DATA_OBU_WARNING_REMOVE = 4 + private const val MSG_DATA_CLEAR = 5 + private const val MSG_DATA_AI_CLEAR = 6 // 维护一个线程定时轮询数据进行地图绘制 private val mDrawerHandler: Handler = @@ -63,6 +72,11 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { identify!!.renderAdasRecognizedResult(msg.obj as List?) } } + MSG_DATA_AI_TRACK -> { + if (msg.obj is List<*>) { + aiCloudIdentify!!.renderAiCloudResult(msg.obj as List) + } + } MSG_DATA_WARNING -> { if (msg.obj is List<*>) { identify!!.renderPlanningWarningObj(msg.obj as List?) @@ -81,6 +95,9 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { MSG_DATA_CLEAR -> { identify!!.clearOldMarker() } + MSG_DATA_AI_CLEAR -> { + aiCloudIdentify!!.clearAiMarker() + } } } } @@ -92,6 +109,13 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { mDrawerHandler.sendMessage(message) } + override fun renderAiCloudResult(resultList: List) { + val message = Message.obtain() + message.what = MSG_DATA_AI_TRACK + message.obj = resultList + mDrawerHandler.sendMessage(message) + } + override fun renderPlanningWarningObj(planningObjects: List?) { val message = Message.obtain() message.what = MSG_DATA_WARNING @@ -105,6 +129,16 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener { mDrawerHandler.sendMessage(message) } + override fun clearAiMarker() { + val message = Message.obtain() + message.what = MSG_DATA_AI_CLEAR + mDrawerHandler.sendMessage(message) + } + + override fun getIdentifyObj(uuid: String): TrackedObject? { + return identify?.getIdentifyObj(uuid) + } + override fun updateTrackerWarningInfo(trafficData: TrafficData) { super.updateTrackerWarningInfo(trafficData) val message = Message.obtain() diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt index d9a344ec2e..0cd59447a9 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt @@ -1,12 +1,17 @@ package com.mogo.eagle.core.function.business.identify +import android.content.Context +import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_IDENTIFY import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.base.IMoGoSubscriber +import com.mogo.eagle.core.function.api.map.marker.IMoGoIdentifyListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.utilcode.util.ThreadUtils import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.TrackedObject +import mogo.yycp.api.proto.SocketDownData /** * 订阅感知数据的订阅者 @@ -14,7 +19,8 @@ import mogo.telematics.pad.MessagePad.TrackedObject * * @author donghongyu */ -class MapIdentifySubscriber private constructor() : IMoGoSubscriber, +@Route(path = PATH_IDENTIFY) +class MapIdentifySubscriber private constructor() : IMoGoIdentifyListener, IMoGoSubscriber, IMoGoAutopilotIdentifyListener { private val TAG = "MapIdentifySubscriber" @@ -36,7 +42,6 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, override fun onDestroy() { CallerAutopilotIdentifyListenerManager.removeListener(TAG) - } override fun onAutopilotIdentifyDataUpdate(trafficData: List?) { @@ -53,6 +58,26 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, } } + fun renderAiCloudResult(cloudData: List) { + try { + if (FunctionBuildConfig.isDrawAiCloudFusion) { + ThreadUtils.getSinglePool().execute { +// aiCloudDataDrawer.renderAiCloudResult(cloudData) + IdentifyFactory.renderAiCloudResult(cloudData) + } + } else { + clearAiCloudRoma() + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + fun clearAiCloudRoma() { +// aiCloudDataDrawer.clearAiMarker() + IdentifyFactory.clearAiMarker() + } + override fun onAutopilotIdentifyPlanningObj(planningObjects: List?) { try { if (FunctionBuildConfig.isDrawIdentifyData && FunctionBuildConfig.debugTrackerProvider == 0) { @@ -67,7 +92,12 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, } } - override fun onAutopilotWarnMessage(warn: MessagePad.Warn?) { + override fun getIdentifyObj(uuid: String): TrackedObject? { + return IdentifyFactory.getIdentifyObj(uuid) + } + + override fun init(context: Context?) { } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java index a5a74dadd5..512ef7bc19 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java @@ -107,18 +107,18 @@ public class TrackObj { private void calHeading() { //更正数据,速度小于LIMIT_SPEED使用上一帧数据 - if (relativeStatic()) { - if (roadAngle != 0.0) { - CenterLine centerLine = CallerMapUIServiceManager.INSTANCE.getMapUIController().getCenterLineInfo(lon, lat, -1); - if (centerLine != null && centerLine.getAngle() != 0) { - cacheData = cacheData.toBuilder().setHeading(centerLine.getAngle()).build(); - } else { - cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); - } - } else { - cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); - } - } +// if (relativeStatic()) { +// if (roadAngle != 0.0) { +// CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo(lon, lat, -1); +// if (centerLine != null && centerLine.getAngle() != 0) { +// cacheData = cacheData.toBuilder().setHeading(centerLine.getAngle()).build(); +// } else { +// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); +// } +// } else { +// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); +// } +// } } public double getRecentlyTime() { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt index 68abd5926b..bc96ab3770 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt @@ -9,9 +9,8 @@ object TrackerSourceColorHelper { @SuppressLint("NewApi") fun filterData(data: TrackedObject): Boolean { - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type - || data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_501.type || data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_502.type - ) { + if (!FunctionBuildConfig.isDrawUnknownIdentifyData && (data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.type + || data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_501.type || data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_502.type)) { return true } var trackIPCFilter = true diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/drawer/BaseDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/drawer/BaseDrawer.java index 09cc8e39b5..b91a16170e 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/drawer/BaseDrawer.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/drawer/BaseDrawer.java @@ -5,7 +5,7 @@ import android.content.Context; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.function.impl.marker.AdasRecognizedType; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; /** * @author congtaowang diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapCameraInfoView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapCameraInfoView.java index 4160a685dd..1a74ba53a8 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapCameraInfoView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapCameraInfoView.java @@ -9,7 +9,7 @@ import android.widget.ImageView; import androidx.annotation.Nullable; import com.mogo.eagle.core.data.map.entity.MarkerShowEntity; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; import com.mogo.map.marker.MogoMarkerOptions; /** diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerBaseView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerBaseView.java index cb1cdbbebe..527d352ed4 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerBaseView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerBaseView.java @@ -12,7 +12,7 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; import com.mogo.eagle.core.data.map.entity.MarkerShowEntity; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; import com.mogo.eagle.core.utilcode.mogo.glide.GlideImageLoader; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.eagle.core.utilcode.util.ViewUtils; diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerView.java index 2fc0e70c84..47bd5de1cf 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/MapMarkerView.java @@ -13,7 +13,7 @@ import com.mogo.commons.module.status.MogoStatusManager; import com.mogo.eagle.core.data.map.PoiWrapper; import com.mogo.eagle.core.data.map.entity.MarkerExploreWay; import com.mogo.eagle.core.data.map.entity.MarkerShowEntity; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.eagle.core.data.config.CloudPoiManager; diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/OnlineCarMarkerView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/OnlineCarMarkerView.java index 99040e3585..e2faf4387b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/OnlineCarMarkerView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/marker/view/OnlineCarMarkerView.java @@ -5,7 +5,7 @@ import android.graphics.BitmapFactory; import android.view.View; import com.mogo.commons.AbsMogoApplication; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; import com.mogo.map.marker.IMogoMarker; import java.lang.ref.SoftReference; diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java index 6fc83d627d..5dfd37b6d0 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java @@ -14,7 +14,7 @@ import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.Polyline; import com.autonavi.amap.mapcore.IPoint; -import com.mogo.eagle.core.function.view.R; +import com.mogo.eagle.core.function.map.R; import java.util.concurrent.ScheduledExecutorService; diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MakerWithCount.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MakerWithCount.kt index ee5bbdb3ca..98061eaeb9 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MakerWithCount.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MakerWithCount.kt @@ -4,7 +4,7 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.eagle.core.function.view.R +import com.mogo.eagle.core.function.map.R import kotlinx.android.synthetic.main.view_maker_with_count.view.* class MakerWithCount @JvmOverloads constructor( diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/V2XMarkerView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/V2XMarkerView.kt index fc1ea65107..687ec34f1b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/V2XMarkerView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/V2XMarkerView.kt @@ -6,7 +6,7 @@ import android.view.LayoutInflater import android.widget.ImageView import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.eagle.core.function.view.R +import com.mogo.eagle.core.function.map.R class V2XMarkerView @JvmOverloads constructor( context: Context, diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt index 60f7bb459d..a452a17994 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt @@ -22,7 +22,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager -import com.mogo.eagle.core.function.view.R +import com.mogo.eagle.core.function.map.R import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt index afd2a45187..5a54d0ba6e 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt @@ -28,6 +28,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager import com.mogo.eagle.core.function.call.biz.CallerFuncBizListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showVideoDialog +import com.mogo.eagle.core.function.map.R import com.mogo.eagle.core.function.smp.MakerWithCount import com.mogo.eagle.core.function.smp.MarkerDrawerManager import com.mogo.eagle.core.function.smp.MarkerDrawerManager.callback diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt index dacf41d373..6c7cc96d89 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt @@ -114,7 +114,6 @@ class HttpDnsStartUp : AndroidStartup() { // 设置是否是直播推流的主播 clientConfig.isAnchor = true when (DebugConfig.getCarMachineType()) { - DebugConfig.CAR_MACHINE_TYPE_BYD -> clientConfig.thirdPartyAppKey = "bydauto" DebugConfig.CAR_MACHINE_TYPE_LENOVO -> clientConfig.thirdPartyAppKey = "pfieouqg" else -> clientConfig.thirdPartyAppKey = "wbvpzgar" } @@ -133,8 +132,6 @@ class HttpDnsStartUp : AndroidStartup() { } else { clientConfig.thirdPartyDeviceId = Utils.getDevicesId() } - // 设置循环检测间隔时间(每隔2小时loop一次httpDnsConfig) - clientConfig.loopCheckDelay = (60 * 60 * 2 * 1000).toLong() //设置长链接的secretKey //todo 通过SHA1和包名找中台服务生成,后续包名分渠道,需要做对应操作 clientConfig.secretKey = "YMj2VFDFxJ3Q4gNoZceJ" 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 9b173d34cd..7f0be345a3 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 @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.v2x.events +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.os.Handler @@ -16,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_C import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_CLOUD import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CLOUD_V2N import com.mogo.eagle.core.data.enums.DataSourceType +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.enums.EventTypeHelper import com.mogo.eagle.core.data.enums.TrafficTypeEnum @@ -26,11 +28,14 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.V2XMsg import com.mogo.eagle.core.data.traffic.TrafficData +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default @@ -43,6 +48,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.V2XConst.BROADCAST_SCENE_H import com.mogo.eagle.core.function.v2x.events.receiver.SceneBroadcastReceiver import com.mogo.eagle.core.function.v2x.events.scenario.impl.V2XScenarioManager import com.mogo.eagle.core.function.v2x.events.utils.toRoadMarker +import com.mogo.eagle.core.function.v2x.events.utils.toV2XRoadEventEntity import com.mogo.eagle.core.function.v2x.internal.V2XManager import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback import com.mogo.eagle.core.function.v2x.internal.config.V2XConfig @@ -53,7 +59,6 @@ import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent import com.mogo.eagle.core.function.v2x.road.V2XEventServiceApi import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler @@ -71,9 +76,10 @@ import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean +import mogo.telematics.pad.MessagePad - -object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback, IV2XCallback { +object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback, IV2XCallback, + IMoGoAutopilotIdentifyListener { private const val TAG = "V2XEventManager" @@ -115,11 +121,13 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback, private fun registerListener() { V2XManager.addCallback(this) CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this) + CallerAutopilotIdentifyListenerManager.addListener(TAG, this) } private fun unRegisterListener() { V2XManager.removeCallback(this) CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + CallerAutopilotIdentifyListenerManager.removeListener(TAG) mogoMarkersHandler.unregisterMarkerClickListener(CARD_TYPE_ROAD_CONDITION) } @@ -196,19 +204,50 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback, handleWarningTargetEvent(event.data) } is V2XEvent.RoadAI -> { - /* - TODO zhongchao 先注掉,编译通过 if(FunctionBuildConfig.isV2NFromCar){ return - }*/ + } handleRoadMarkerEvent(event.data.toRoadMarker()) } + } + } - is V2XEvent.RoadEventX -> { - handleRoadMarkerEvent(event.data.toRoadMarker()) - } - else -> { - Logger.d(TAG, "other event: $event") + @SuppressLint("NewApi") + override fun onAutopilotIdentifyPlanningObj(planningObjects: List?) { + super.onAutopilotIdentifyPlanningObj(planningObjects) + if(!FunctionBuildConfig.isV2NFromCar){ + return + } + planningObjects?.let { + if (it.isNotEmpty()) { + val first = it.stream() + .filter { planningObj: MessagePad.PlanningObject -> planningObj.type >= 1000 } + .findFirst() + if (first.isPresent) { + val poiType = when (first.get().type) { +// 1004 -> { //V2N_RSM,静止事件,包括异常停车、异常静止障碍物 +// } + 1005 -> { //V2N_RSI,施工事件,包括锥桶或者挡板围城的施工场景,是个多边形包围区域 + EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType + } + 1007 -> { //三角牌 + EventTypeEnumNew.FOURS_ACCIDENT_04.poiType + } + else -> { + return + } + } + CallerLogger.d("$M_V2X$TAG", "poiType : $poiType , 触发道路事件") + val trackedObj = + CallerMapIdentifyManager.getIdentifyObj(first.get().uuid.toString()) + trackedObj?.let { t -> + CallerLogger.d("$M_V2X$TAG", "polygon size : ${(t.polygonList.size)}") + val v2XMessageEntity = V2XMessageEntity() + v2XMessageEntity.type = V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING + v2XMessageEntity.content = t.toRoadMarker(poiType).toV2XRoadEventEntity() + V2XScenarioManager.getInstance().handlerMessage(v2XMessageEntity) + } + } } } } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/warning/V2XFrontWarningScenario.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/warning/V2XFrontWarningScenario.java index f2c9d7e1e6..5ee305f4b3 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/warning/V2XFrontWarningScenario.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/warning/V2XFrontWarningScenario.java @@ -10,6 +10,7 @@ import android.util.Log; import androidx.annotation.Nullable; +import com.mogo.eagle.core.data.enums.EventTypeEnumNew; import com.mogo.eagle.core.data.enums.WarningDirectionEnum; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.data.map.entity.V2XMessageEntity; @@ -64,8 +65,9 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMoGoChas CallerLogger.INSTANCE.d(M_V2X + TAG, "----- show --- 1 --:\n" + (mMarkerEntity == null ? "null" : mMarkerEntity.toString())); if (mMarkerEntity != null) { CallerLogger.INSTANCE.d(M_V2X + TAG, "----- show --- 2 --:\n" + mMarkerEntity); - int v2xType = getV2XTypeForFrontWarning(mMarkerEntity); - if (v2xType != 0) { + String v2xType = getV2XTypeForFrontWarning(mMarkerEntity); + V2XMessageEntity entity = getV2XMessageEntity(); + if (!v2xType.equals("0")) { if (getAlertContentForFrontWarning(mMarkerEntity).toString() == null || getAlertContentForFrontWarning(mMarkerEntity).toString().isEmpty() || mMarkerEntity.getTts() == null || mMarkerEntity.getTts().isEmpty()) { @@ -87,19 +89,19 @@ public class V2XFrontWarningScenario extends AbsV2XScenario implements IMoGoChas } } - private int getV2XTypeForFrontWarning(V2XWarningTarget entity) { + private String getV2XTypeForFrontWarning(V2XWarningTarget entity) { switch (entity.getType()) { case 1: case 11: entity.setTts("注意行人"); - return 0X2B0201; + return EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_PERSON.getPoiType(); case 2: entity.setTts("注意自行车"); case 4: entity.setTts("注意摩托车"); - return 0X2B0202; + return EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_MOTOR_VEHICLES.getPoiType(); } - return 0; + return "0"; } private CharSequence getAlertContentForFrontWarning(V2XWarningTarget entity) { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/V2XRefreshModel.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/V2XRefreshModel.kt index 2b57db3ab8..517e16e76b 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/V2XRefreshModel.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/V2XRefreshModel.kt @@ -4,6 +4,7 @@ import com.elegant.network.utils.GsonUtil import com.elegant.network.utils.SignUtil import com.elegant.utils.CommonUtils import com.mogo.cloud.network.RetrofitFactory +import com.mogo.commons.constants.HostConst import com.mogo.eagle.core.function.v2x.internal.V2XManager import com.mogo.eagle.core.function.v2x.internal.config.V2XConfig import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation @@ -26,7 +27,7 @@ internal class V2XRefreshModel { callback: IV2XRefreshCallback? ): Disposable? { val config = V2XManager.getConfig() - val retrofit = RetrofitFactory.getInstance(config.baseUrl) ?: return null + val retrofit = RetrofitFactory.getInstance(HostConst.getEagleHost()) ?: return null return retrofit .create(V2XApiService::class.java) .querySnapshotSync(buildParams(longitude, latitude, config)) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/api/V2XApiService.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/api/V2XApiService.kt index a8f3266337..1b9bc293db 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/api/V2XApiService.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/internal/http/api/V2XApiService.kt @@ -9,6 +9,6 @@ import retrofit2.http.POST internal interface V2XApiService { @FormUrlEncoded - @POST("/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync") + @POST("eagle-eye-dns/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync") fun querySnapshotSync(@FieldMap parameters: Map): Maybe } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index e85849509a..ff6a6b3135 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -48,6 +48,14 @@ object FunctionBuildConfig { @JvmField var detouringSpeed = 3 + /** + * 是否从车端融合过来的v2n事件 + * 默认关闭,开启后接收车端融合预警,关闭云端长链V2N + */ + @Volatile + @JvmField + var isV2NFromCar = false + /** * 是否是感知优化模式 * 默认开启 @@ -59,6 +67,20 @@ object FunctionBuildConfig { @JvmField var isBeautyMode = true + /** + * 是否绘制云端感知物 + */ + @Volatile + @JvmField + var isDrawAiCloudFusion = true + + /** + * 是否开启roma + */ + @Volatile + @JvmField + var isRomaMode = false + /** * 是否开启感知物替换颜色功能 * 默认关闭 diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java index ec77fa799c..b67cf92f55 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java @@ -92,4 +92,8 @@ public class MogoServicePaths { @Keep public static final String PATH_DATA_CENTER_MODULE = "/data_center/api"; + + + @Keep + public static final String PATH_IDENTIFY = "/map/identify"; } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index bd6fc6f58b..f53dce752d 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -109,6 +109,11 @@ interface IDevaToolsProvider : IProvider { */ fun downLoadPackage(downloadKey: String, downloadUrl: String) + /** + * 更新下载进度 + */ + fun updateUpgradeProgress() + /** * 展示状态栏 */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt index 0bcdf721fe..da403dc073 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt @@ -51,4 +51,8 @@ interface IMoGoDevaToolsListener { } + fun mofangStatus(status:Boolean){ + + } + } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt index 2bdf8d3bce..2dcdc304b8 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt @@ -36,9 +36,4 @@ interface IViewControlListener { */ fun updateStatusBarDownloadView(insert: Boolean, tag: String, progress: Int){} - /** - * 更新魔方的连接状态 - */ - fun updateMfStatus(tag: String, status: Boolean){} - } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt index 6f00c8a330..537b33fe1d 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt @@ -136,9 +136,5 @@ interface IMoGoHmiProvider :IProvider{ */ fun updateStatusBarDownloadView(insert: Boolean, tag: String, progress: Int) - /** - * 更新魔方的连接状态 - */ - fun updateMfStatus(tag: String, status: Boolean) } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMoGoIdentifyListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMoGoIdentifyListener.kt new file mode 100644 index 0000000000..ad40f975f0 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/marker/IMoGoIdentifyListener.kt @@ -0,0 +1,10 @@ +package com.mogo.eagle.core.function.api.map.marker + +import com.alibaba.android.arouter.facade.template.IProvider +import mogo.telematics.pad.MessagePad + +interface IMoGoIdentifyListener :IProvider{ + + fun getIdentifyObj(uuid: String): MessagePad.TrackedObject? + +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt index 0324e472b6..e5dbf6ed43 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt @@ -55,4 +55,11 @@ object CallerDevaToolsListenerManager : CallerBase() { } } + fun invokeMoFangStatus(status:Boolean){ + M_LISTENERS.forEach { + val listener = it.value + listener.mofangStatus(status) + } + } + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 753a80650d..345daf5c4c 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -147,6 +147,13 @@ object CallerDevaToolsManager { devaToolsProviderApi?.downLoadPackage(downloadKey, downloadUrl) } + /** + * 更新下载进度 + */ + fun updateUpgradeProgress() { + devaToolsProviderApi?.updateUpgradeProgress() + } + /** * 展示状态栏 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 91262ceb64..8339a0c006 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -212,11 +212,4 @@ object CallerHmiManager { hmiProviderApi?.updateStatusBarDownloadView(insert, tag, progress) } - /** - * 更新魔方的链接状态 - */ - fun updateMfStatusView(tag: String, status: Boolean) { - hmiProviderApi?.updateMfStatus(tag, status) - } - } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt index e8111fc515..566b6e209e 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt @@ -45,8 +45,4 @@ object CallerHmiViewControlListenerManager : CallerBase() M_LISTENERS[tag]?.updateStatusBarDownloadView(insert, tag, progress) } - fun updateMfStatus(tag: String, viewTag: String, status: Boolean) { - M_LISTENERS[tag]?.updateMfStatus(viewTag, status) - } - } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt new file mode 100644 index 0000000000..d980170cbc --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt @@ -0,0 +1,19 @@ +package com.mogo.eagle.core.function.call.map + +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_IDENTIFY +import com.mogo.eagle.core.function.api.map.marker.IMoGoIdentifyListener +import com.mogo.eagle.core.function.call.base.CallerBase +import mogo.telematics.pad.MessagePad + +object CallerMapIdentifyManager : CallerBase() { + + private val identifyApi: IMoGoIdentifyListener + get() = ARouter.getInstance().build(PATH_IDENTIFY) + .navigation() as IMoGoIdentifyListener + + fun getIdentifyObj(uuid: String): MessagePad.TrackedObject? { + return identifyApi.getIdentifyObj(uuid) + } + +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt index fa933ad83a..5970ebf407 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt @@ -243,11 +243,21 @@ object CallerVisualAngleManager { PriorityQueue() } + @Volatile + private var mLevel:Boolean = false + + fun updateLongSightLevel(level:Boolean){ + mLevel = level + } + fun changeVisualAngle(current: Scene) { val appIdentityMode = FunctionBuildConfig.appIdentityMode if (AppIdentityModeUtils.isBus(appIdentityMode) && AppIdentityModeUtils.isPassenger(appIdentityMode)) { return } + if(mLevel){ + return + } val triggerTime = SystemClock.elapsedRealtime() scope.launch { Log.d("${M_DEVA}${TAG}", "--- 1 ---") diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ActivityUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ActivityUtils.java index 6796a153a6..f49fd31192 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ActivityUtils.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ActivityUtils.java @@ -5,20 +5,18 @@ import android.content.ComponentName; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; +import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.View; -import java.lang.ref.WeakReference; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - import androidx.annotation.AnimRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -26,6 +24,13 @@ import androidx.core.app.ActivityOptionsCompat; import androidx.core.util.Pair; import androidx.fragment.app.Fragment; +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + /** *
  *     author: Blankj
@@ -2136,4 +2141,65 @@ public final class ActivityUtils {
             return Utils.getApp();
         }
     }
+
+    public static void setDefaultL(Context context) {
+        if (AppUtils.isDefaultHome(context)) {
+            return;
+        }
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory("android.intent.category.HOME");
+        intent.addCategory("android.intent.category.DEFAULT");
+        try {
+            intent.setComponent(new ComponentName("android", "com.android.internal.app.ResolverActivity"));
+            startActivity(intent);
+        } catch (Exception e) {//还不行,就只能应用程序设置了
+            intent = new Intent(Settings.ACTION_APPLICATION_SETTINGS);
+            startActivity(intent);
+        }
+    }
+
+    /**
+     * @param context
+     * @param componentName
+     */
+    public static void setDefaultLauncherApp(Context context, ComponentName componentName) {
+        PackageManager packageManager = context.getPackageManager();
+        Class refPackageManager = packageManager.getClass();
+        Method[] methods = refPackageManager.getDeclaredMethods();
+        Method mReplacePreferredActivity = null;
+        Method mGetHomeActivities = null;
+        for (Method method : methods) {
+            if (method.getName().equals("replacePreferredActivity")) {
+                mReplacePreferredActivity = method;
+            }
+            if (method.getName().equals("getHomeActivities")) {
+                mGetHomeActivities = method;
+            }
+        }
+        mReplacePreferredActivity.setAccessible(true);
+        mGetHomeActivities.setAccessible(true);
+
+        IntentFilter HOME_FILTER = new IntentFilter(Intent.ACTION_MAIN);
+        HOME_FILTER.addCategory(Intent.CATEGORY_HOME);
+        HOME_FILTER.addCategory(Intent.CATEGORY_DEFAULT);
+        final List allComponents = new ArrayList<>();
+        final List homeActivities = new ArrayList<>();
+        try {
+            mGetHomeActivities.invoke(packageManager, homeActivities);
+            for (ResolveInfo info : homeActivities) {
+                final ActivityInfo appInfo = info.activityInfo;
+                ComponentName activityName = new ComponentName(appInfo.packageName, appInfo.name);
+                allComponents.add(activityName);
+            }
+            mReplacePreferredActivity.invoke(
+                    packageManager,
+                    HOME_FILTER,
+                    IntentFilter.MATCH_CATEGORY_EMPTY,
+                    allComponents.toArray(new ComponentName[0]),
+                    componentName);
+        } catch (IllegalAccessException | InvocationTargetException e) {
+            e.printStackTrace();
+        }
+    }
+
 }
diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/AppUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/AppUtils.java
index 003aabf9b0..4ac13c5cc4 100644
--- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/AppUtils.java
+++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/AppUtils.java
@@ -10,6 +10,7 @@ import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.pm.Signature;
 import android.content.pm.SigningInfo;
 import android.graphics.drawable.Drawable;
@@ -18,15 +19,15 @@ import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 
  *     author: Blankj
@@ -1017,4 +1018,18 @@ public final class AppUtils {
                     "\n}";
         }
     }
+
+    /**
+     * 判断自己是否为默认桌面
+     */
+    public static boolean isDefaultHome(Context context) {
+        Intent intent = new Intent(Intent.ACTION_MAIN);//Intent.ACTION_VIEW
+        intent.addCategory("android.intent.category.HOME");
+        intent.addCategory("android.intent.category.DEFAULT");
+        PackageManager pm = context.getPackageManager();
+        ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+        boolean isDefault = context.getPackageName().equals(info.activityInfo.packageName);
+        return isDefault;
+    }
+
 }
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
index f48819b07f..f1d78dfc1d 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
@@ -43,9 +43,7 @@ public abstract class AbsMogoApplication extends Application {
         AppStateManager.INSTANCE.init(this);
         initRxJavaErrorHandler();
         FinalizeCrashFixer.fix();
-//        if (!shouldInit()) {
         AutoSize.checkAndInit(this);
-//        }
 
         ScreenHelper.setScreenConfig(this);
         Utils.init(this);
@@ -71,8 +69,7 @@ public abstract class AbsMogoApplication extends Application {
                 return null;
             }
             try {
-                View contentView = generateToastView(context, message, tipDrawable);
-                return contentView;
+                return generateToastView(context, message, tipDrawable);
             } catch (Exception e) {
                 e.printStackTrace();
             }
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/module/MogoServices.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/module/MogoServices.java
index 5926f0af9d..014c9101f4 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/module/MogoServices.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/module/MogoServices.java
@@ -8,7 +8,6 @@ import android.content.IntentFilter;
 import android.net.ConnectivityManager;
 import android.text.TextUtils;
 
-import com.mogo.commons.debug.DebugConfig;
 import com.mogo.commons.module.intent.IMogoIntentListener;
 import com.mogo.commons.module.intent.IntentHandlerFactory;
 import com.mogo.commons.module.intent.IntentManager;
@@ -18,7 +17,6 @@ import com.mogo.commons.voice.AIAssist;
 import com.mogo.eagle.core.data.config.CloudPoiManager;
 import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
 import com.mogo.eagle.core.utilcode.util.NetworkUtils;
-import com.mogo.realtime.api.MoGoAiCloudRealTime;
 
 import java.util.List;
 
@@ -57,10 +55,6 @@ public class MogoServices implements IMogoIntentListener {
         Intent intent = new Intent("com.freedom.ser.ACTION");
         intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
         mContext.sendBroadcast(intent);
-
-//        if (DebugConfig.isNeedUploadCoordinatesDurationInTime()) {
-//            MoGoAiCloudRealTime.startRealTime(mContext, DebugConfig.getSocketAppId());
-//        }
     }
 
     private void registerMogoReceiver(Context context) {
@@ -105,9 +99,6 @@ public class MogoServices implements IMogoIntentListener {
 
     public void destroy() {
         CallerLogger.INSTANCE.d(M_OLD_OTHER + TAG, "MogoServices do nothings.");
-//        if (DebugConfig.isNeedUploadCoordinatesDurationInTime()) {
-//            MoGoAiCloudRealTime.stopRealTime();
-//        }
     }
 
 }
diff --git a/gradle.properties b/gradle.properties
index 922318a892..8764d7688e 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,7 +10,7 @@
 org.gradle.daemon=true
 org.gradle.configureondemand=true
 org.gradle.parallel=true
-org.gradle.jvmargs=-Xmx2048m
+org.gradle.jvmargs=-Xmx3048m
 #开启gradle缓存
 org.gradle.caching=true
 android.enableBuildCache=true
@@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.32-beta3
 MOGO_TELEMATIC_VERSION=1.4.3.32-beta2
 ######## MogoAiCloudSDK Version ########
 # 自研地图
-MAP_SDK_VERSION=2.9.0.8_gamap_02
+MAP_SDK_VERSION=2.10.0.2_test_01
 MAP_SDK_OPERATION_VERSION=1.1.4.1
 # websocket
 WEBSOCKET_VERSION=1.1.7
@@ -119,10 +119,8 @@ MOGO_MODULE_V2X_VERSION=2.1.16.10
 MOGO_MODULE_OBU_MOGO_VERSION=2.1.16.10
 # bugly
 CRASHREPORT_VERSION=2.1.16.10
-CRASHREPORT_BUGLY_VERSION=2.1.16.10
 CRASHREPORT_NOOP_VERSION=2.1.16.10
 CRASHREPORT_APMBYTE_VERSION=2.1.16.10
-CRASHREPORT_UPGRADE_VERSION=2.1.16.10
 ## tts
 TTS_BASE_VERSION=2.1.16.10
 TTS_DI_VERSION=2.1.16.10
diff --git a/libraries/mogo-adas-data/src/main/proto/SocketDownDataProto3.proto b/libraries/mogo-adas-data/src/main/proto/SocketDownDataProto3.proto
new file mode 100644
index 0000000000..b101f6234c
--- /dev/null
+++ b/libraries/mogo-adas-data/src/main/proto/SocketDownDataProto3.proto
@@ -0,0 +1,78 @@
+syntax = "proto3";
+package mogo.yycp.service;
+option java_package = "mogo.yycp.api.proto";
+option java_outer_classname = "SocketDownData";
+/*
+message xxx {
+  // 字段规则:required -> 字段只能也必须出现 1 次
+  // 字段规则:optional -> 字段可出现 0 次或1次
+  // 字段规则:repeated -> 字段可出现任意多次(包括 0)
+  // 类型:int32、int64、sint32、sint64、string、32-bit ....
+  // 字段编号:0 ~ 536870911(除去 19000 到 19999 之间的数字)
+  字段规则 类型 名称 = 字段编号;
+}
+*/
+//返回车机主实体
+message SocketDownDataProto {
+    uint64 seq = 1;
+    uint32 msgType = 2;
+    string sn = 3;
+    LauncherSnapshotProto data = 4;
+    uint64 utcTime = 5;
+    uint64 upUtcTime = 6;
+    string cityCode = 7;
+}
+
+//LauncherSnapshot数据响应VO
+message LauncherSnapshotProto {
+    //总数据集合 RoadDataVo
+    repeated CloudRoadDataProto allList = 1;
+    //前方50米数据集合 RoadDataVo
+    repeated CloudRoadDataProto nearList = 2;
+    //摄像头 RoadDataVo
+    CloudRoadDataProto camera = 3;
+    string msgId = 4;
+    uint64 time = 5;
+    //过期时间
+    uint64 expire = 6;
+}
+//RoadDataVo
+message CloudRoadDataProto {
+    /**物体类型 1-人 2-自行车 3-小轿车 4-摩托车 5-红绿灯 6-bus 8-truck 9-路边摄像头*/
+    uint32 type = 1;
+    /**数据来源 1,"自车数据"  2,"ADAS数据"  3,"路测设备识别数据" */
+    uint32 fromType = 2;
+    /**
+     * 车机上行pgs坐标给lat,lon两个成员变量
+     *
+     * 在下发车机时计算高德经纬度
+     * 1.将gps(lat,lon)给wgslat,wgalon
+     * 2.高德算法算出高德经纬度,给lat,lon
+     */
+    double lat = 3; //gps->gd
+    double lon = 4; //gps->gd
+    double wgslat = 5; //原gps
+    double wgslon = 6; //原gps
+    //车机sn
+    string sn = 7;
+    //车辆UUID
+    string uuid = 8;
+    /** 车牌号 */
+    string cardId = 9;
+    /**速度*/
+    double speed = 10;
+    /**方向*/
+    double heading = 11;
+    /** 系统时间 */
+    uint64 systemTime = 12;
+    /** 星历时间 */
+    uint64 satelliteTime = 13;
+    /**红绿灯状态 1红 2绿 3黄*/
+    uint32 lightStatus = 14;
+    /**红绿灯剩余时间 读秒*/
+    uint32 lightLeftTime = 15;
+    /**视频流直播地址*/
+    string rtmpUrl = 16;
+    /**距离*/
+    double distance = 17;
+}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
index 91cfec766c..c0e67529b8 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
@@ -195,14 +195,6 @@ public interface OnAdasListener {
      */
     void onPlanningActionMsg(MessagePad.Header header, MessagePad.PlanningActionMsg planningActionMsg);
 
-    /**
-     * OBU预警事件
-     *
-     * @param header         头
-     * @param obuWarningData 数据
-     */
-    void onObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData obuWarningData);
-
     /**
      * OBU 红绿灯预警信息
      *
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java
index e07f3d0f2e..29f364d901 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java
@@ -26,7 +26,7 @@ public class ObuWarningDataMessage extends MyAbstractMessageHandler {
         if (CupidLogUtils.isEnableLog())
             nowTime = SystemClock.elapsedRealtime();
         if (adasListener != null) {
-            adasListener.onObuWarningData(raw.getHeader(), obuWarningData);
+//            adasListener.onObuWarningData(raw.getHeader(), obuWarningData);
         }
         AdasChannel.calculateTimeConsumingBusiness("OBU预警事件", nowTime);
 
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
index 72aa1774bb..07ba7245d8 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
@@ -1,5 +1,6 @@
 package com.mogo.map;
 
+import com.mogo.eagle.core.data.map.MogoLatLng;
 import com.mogo.map.center.CenterLine;
 import com.mogo.map.marker.IMogoMarker;
 import com.mogo.map.marker.MogoMarkerOptions;
@@ -12,6 +13,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 
 import mogo.telematics.pad.MessagePad;
+import mogo.yycp.api.proto.SocketDownData;
 
 /**
  * @author congtaowang
@@ -51,6 +53,13 @@ public interface IMogoMap {
      */
     void updateBatchMarkerPosition(HashMap optionsArrayList);
 
+    /**
+     * 批量更新锚点位置
+     *
+     * @param optionsArrayList 锚点集合
+     */
+    void updateBatchAiMarkerPosition(HashMap optionsArrayList);
+
     /**
      * 添加感知使用到的3d模型
      *
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java
index 626bfd6b4f..8e7e2db59f 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java
@@ -10,6 +10,7 @@ import java.util.List;
 import java.util.Map;
 
 import mogo.telematics.pad.MessagePad;
+import mogo.yycp.api.proto.SocketDownData;
 
 /**
  * @author congtaowang
@@ -44,6 +45,13 @@ public interface IMogoMarkerManager {
      */
     void updateBatchMarkerPosition(HashMap optionsArrayList);
 
+    /**
+     * 批量更新锚点位置
+     *
+     * @param optionsArrayList 锚点集合
+     */
+    void updateBatchAiMarkerPosition(HashMap optionsArrayList);
+
     /**
      * 添加感知使用到的3d模型
      *
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
index 919fe0f9d7..362b48f839 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
@@ -13,6 +13,7 @@ import com.mogo.eagle.core.data.map.MogoLocation;
 
 import java.util.List;
 
+
 /**
  * @author congtaowang
  * @since 2019-12-26
@@ -48,6 +49,17 @@ public interface IMogoMapUIController {
      */
     void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng);
 
+    /**
+     * 设置漫游路径
+     * @param trajectory
+     */
+    void setRoamTrajectory(String trajectory);
+
+    /**
+     * 设置漫游模式 , 0:自由漫游,1:路径漫游
+     */
+    void setRomaMode(int mode);
+
     /**
      * 获得当前地图视距模式
      *
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/VisualAngleMode.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/VisualAngleMode.java
index 61d453ed1d..1b3748d975 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/VisualAngleMode.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/VisualAngleMode.java
@@ -35,7 +35,12 @@ public enum VisualAngleMode implements IMogoMapVisualAngle {
     /**
      * 十字路口视角
      */
-    MAP_STYLE_VR_ANGLE_CROSS(5);
+    MAP_STYLE_VR_ANGLE_CROSS(5),
+
+    /**
+     * 漫游模式
+     */
+    MAP_STYLE_VR_ROMA(7);
 
 
     private final int code;
@@ -62,4 +67,8 @@ public enum VisualAngleMode implements IMogoMapVisualAngle {
     public boolean isMediumSight() {
         return code == MODE_MEDIUM_SIGHT.getCode();
     }
+
+    public boolean isRoma(){
+        return code == MAP_STYLE_VR_ROMA.getCode();
+    }
 }
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
index cdd18809f0..8c003a0a5f 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java
@@ -8,6 +8,7 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_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.MAP_STYLE_VR_ROMA;
 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;
@@ -83,6 +84,7 @@ import org.jetbrains.annotations.Nullable;
 import java.util.ArrayList;
 import java.util.List;
 
+
 public class AMapViewWrapper implements IMogoMapView,
         IMogoMapUIController,
         OnMapLoadedListener,
@@ -362,6 +364,16 @@ public class AMapViewWrapper implements IMogoMapView,
         }
     }
 
+    @Override
+    public void setRoamTrajectory(String trajectory) {
+        mMapView.getMapAutoViewHelper().setRoamTrajectory(ROMA_ROAD);
+    }
+
+    @Override
+    public void setRomaMode(int mode) {
+        mMapView.getMapAutoViewHelper().setRoamStyle(mode,1800, MapAutoApi.ROAM_SPEED_40);
+    }
+
     @Override
     public VisualAngleMode getCurrentMapVisualAngle() {
         return mVisualAngleMode;
@@ -384,7 +396,7 @@ public class AMapViewWrapper implements IMogoMapView,
     public void moveToCenter(MogoLatLng latLng, boolean animate) {
         CallerLogger.INSTANCE.d(M_MAP + TAG, "move to center " + latLng);
         if (latLng == null || latLng.lat == 0.0d || latLng.lon == 0.0d) {
-            CallerLogger.INSTANCE.e(M_MAP + TAG, "latlng = null or is illegal");
+            CallerLogger.INSTANCE.e(M_MAP + TAG, "latLng = null or is illegal");
             return;
         }
         if (DebugConfig.isDebug()) {
@@ -727,13 +739,19 @@ public class AMapViewWrapper implements IMogoMapView,
             initMapView();
             initMyLocation();
             loadPreVehicleModel();
-
-            if (mMapView.getLocationClient() != null) {
-                mMapView.getLocationClient().setIsUseExtraGPSData(true);
-            }
+            loadRomaRoad(); //todo for show of hengyang
         }
     }
 
+    private static final String ROMA_ROAD = "112.577698,26.82026482,112.5776649,26.82024463,112.5776315,26.82022433,112.5775976,26.82020375,112.5775631,26.8201828,112.5775278,26.8201614,112.5774918,26.82013967,112.5774553,26.82011768,112.5774184,26.82009541,112.5773801,26.82007238,112.577343,26.82005009,112.5773046,26.82002699,112.5772689,26.82000566,112.5772343,26.81998499,112.5771981,26.8199634,112.5771604,26.81994093,112.5771241,26.81991927,112.5770863,26.81989686,112.577048,26.81987432,112.5770092,26.81985169,112.5769702,26.81982908,112.5769311,26.8198067,112.5768912,26.81978399,112.5768525,26.81976202,112.5768148,26.81974082,112.5767765,26.81971934,112.5767375,26.8196976,112.5767005,26.81967709,112.5766627,26.81965632,112.5766243,26.8196354,112.5765873,26.81961534,112.5765514,26.81959614,112.5765094,26.81957391,112.5764739,26.81955537,112.5764377,26.81953663,112.5763962,26.8195154,112.5763611,26.81949759,112.5763253,26.81947942,112.5762886,26.81946081,112.5762538,26.81944299,112.5762181,26.81942459,112.5761771,26.81940327,112.5761425,26.81938516,112.5761026,26.81936424,112.5760665,26.81934525,112.5760283,26.81932496,112.5759929,26.81930612,112.5759553,26.81928594,112.5759164,26.819265,112.5758797,26.81924523,112.5758431,26.81922557,112.5758043,26.81920481,112.5757701,26.81918656,112.5757372,26.81916931,112.575705,26.81915323,112.5756723,26.8191394,112.5756388,26.81913008,112.5756042,26.81912741,112.5755689,26.81913241,112.5755345,26.81914523,112.575501,26.81916323,112.5754702,26.81918345,112.5754414,26.81920591,112.5754142,26.81923028,112.5753873,26.8192577,112.5753624,26.81928628,112.5753385,26.81931747,112.575318,26.81934811,112.5752981,26.81938112,112.575279,26.81941509,112.5752615,26.81944712,112.5752441,26.81947941,112.5752259,26.8195132,112.5752073,26.81954787,112.5751884,26.81958344,112.5751691,26.81961976,112.5751494,26.81965723,112.57513,26.81969415,112.575111,26.81973053,112.5750914,26.81976802,112.5750718,26.81980571,112.5750521,26.81984347,112.5750319,26.81988209,112.5750139,26.81991636,112.5749962,26.81995017,112.5749754,26.81998984,112.5749573,26.82002443,112.5749386,26.8200601,112.5749197,26.82009614,112.5749008,26.82013245,112.5748813,26.82016981,112.5748627,26.82020577,112.574843,26.82024356,112.5748242,26.82027988,112.5748048,26.8203173,112.5747853,26.82035503,112.5747657,26.82039302,112.5747457,26.82043198,112.5747264,26.82046932,112.5747067,26.82050756,112.5746869,26.82054576,112.5746677,26.82058291,112.5746479,26.82062126,112.5746291,26.82065783,112.5746089,26.82069715,112.5745902,26.82073333,112.5745732,26.82076629,112.5745548,26.82080203,112.5745377,26.82083496,112.5745212,26.82086682,112.574505,26.82089828,112.5744891,26.82092935,112.574473,26.82096083,112.5744574,26.82099114,112.5744427,26.82102038,112.5744341,26.82105102,112.5744217,26.82108217,112.5744034,26.82111193,112.5743842,26.821142,112.5743648,26.82117413,112.5743472,26.82120453,112.5743279,26.82123795,112.5743097,26.82127083,112.5742903,26.82130636,112.5742724,26.8213397,112.5742548,26.82137277,112.574237,26.8214064,112.5742188,26.82144091,112.5742005,26.82147546,112.5741813,26.82151155,112.5741619,26.8215485,112.5741421,26.82158628,112.574124,26.82162082,112.5741058,26.8216558,112.5740873,26.82169111,112.5740687,26.82172683,112.5740495,26.8217638,112.5740308,26.82179956,112.5740115,26.82183663,112.5739919,26.82187428,112.573972,26.82191258,112.5739519,26.82195149,112.5739332,26.82198747,112.5739153,26.82202211,112.5738944,26.82206251,112.5738756,26.82209882,112.5738567,26.8221355,112.5738378,26.82217255,112.5738182,26.82221085,112.5737995,26.82224751,112.5737803,26.82228527,112.5737607,26.82232415,112.5737419,26.82236124,112.5737225,26.82239931,112.5737029,26.82243731,112.5736827,26.82247603,112.5736634,26.82251246,112.5736438,26.82254928,112.5736243,26.82258572,112.5736043,26.82262308,112.5735852,26.82265864,112.5735657,26.82269511,112.5735457,26.82273244,112.5735268,26.82276772,112.5735077,26.82280347,112.5734861,26.82284394,112.5734658,26.822882,112.5734452,26.82292018,112.5734247,26.82295753,112.5734042,26.82299402,112.5733832,26.82303027,112.5733626,26.82306378,112.5733406,26.82309759,112.573319,26.82312874,112.5732941,26.82316277,112.5732689,26.82319562,112.5732434,26.82322829,112.5732177,26.82326103,112.573125,26.823276,112.5730926,26.82319509,112.5731186,26.82316135,112.5731418,26.82313049,112.5731671,26.82309585,112.5731906,26.82306251,112.5732133,26.82302916,112.5732356,26.82299504,112.5732575,26.82296012,112.5732792,26.8229244,112.5733004,26.82288868,112.5733224,26.82285045,112.5733415,26.82281652,112.5733631,26.82277759,112.5733823,26.82274233,112.5734012,26.8227074,112.5734232,26.82266644,112.5734429,26.82262949,112.5734628,26.82259213,112.5734828,26.82255438,112.573503,26.82251618,112.5735232,26.82247772,112.5735441,26.82243805,112.573564,26.82240019,112.5735849,26.82236028,112.5736054,26.82232125,112.5736254,26.82228313,112.5736465,26.82224299,112.5736666,26.82220471,112.5736877,26.82216437,112.5737079,26.8221259,112.5737285,26.8220863,112.5737493,26.82204643,112.5737701,26.82200633,112.5737916,26.82196499,112.5738122,26.82192543,112.5738339,26.82188365,112.5738547,26.82184377,112.5738767,26.82180167,112.5738956,26.82176558,112.5739167,26.82172515,112.5739391,26.82168239,112.5739605,26.82164148,112.573983,26.8215983,112.5740045,26.82155708,112.5740266,26.82151468,112.5740465,26.8214764,112.5740659,26.8214391,112.5740854,26.82140175,112.574105,26.82136438,112.5741274,26.8213217,112.5741469,26.82128434,112.5741666,26.82124703,112.5741861,26.82120977,112.5742058,26.82117251,112.5742277,26.82113096,112.574248,26.82109253,112.5742678,26.8210551,112.5742876,26.82101759,112.5743103,26.82097465,112.5743301,26.82093699,112.5743495,26.82090037,112.5743727,26.82085623,112.5743926,26.82081862,112.5744124,26.82078108,112.5744321,26.82074358,112.5744518,26.82070609,112.5744715,26.82066866,112.5744938,26.82062594,112.5745133,26.82058863,112.574535,26.82054716,112.5745549,26.82050899,112.5745741,26.82047199,112.5745933,26.82043511,112.5746145,26.82039418,112.574634,26.82035661,112.5746549,26.82031624,112.574676,26.82027535,112.5746968,26.82023518,112.5747177,26.82019483,112.5747373,26.82015724,112.5747573,26.82011956,112.5747776,26.82008238,112.5747981,26.82004564,112.5748193,26.82000863,112.5748421,26.81996979,112.5748629,26.81993507,112.5748842,26.81989978,112.574907,26.81986224,112.5749281,26.81982769,112.5749484,26.81979457,112.5749701,26.8197589,112.5749921,26.81972245,112.5750122,26.81968835,112.5750325,26.81965318,112.5750515,26.81961904,112.5750695,26.81958583,112.5750898,26.81954748,112.5751093,26.81951021,112.5751277,26.81947433,112.5751461,26.81943786,112.5751632,26.8194037,112.5751818,26.81936582,112.575199,26.81933074,112.5752154,26.81929703,112.575232,26.81926305,112.5752475,26.81923084,112.5752623,26.81920053,112.5752764,26.8191712,112.5752904,26.81914362,112.5753061,26.81911433,112.5753237,26.81908528,112.5753441,26.81905648,112.5753677,26.81902905,112.5753944,26.81900493,112.5754244,26.81898445,112.5754583,26.81896707,112.575493,26.81895367,112.5755294,26.81894349,112.575567,26.81893672,112.5756041,26.81893372,112.5756415,26.8189344,112.5756798,26.81893869,112.5757186,26.81894678,112.5757544,26.81895756,112.5757898,26.81897108,112.5758268,26.81898715,112.5758655,26.81900556,112.5759008,26.81902323,112.5759373,26.81904202,112.5759748,26.81906168,112.5760131,26.81908211,112.5760514,26.81910281,112.5760868,26.81912227,112.5761239,26.81914281,112.5761608,26.81916343,112.5761975,26.81918408,112.5762367,26.81920643,112.5762756,26.81922888,112.5763151,26.81925176,112.57635,26.81927208,112.5763891,26.81929497,112.5764295,26.81931871,112.5764661,26.81934025,112.5765068,26.81936437,112.5765425,26.81938563,112.5765836,26.81941011,112.5766186,26.81943106,112.5766557,26.81945345,112.5766919,26.81947536,112.5767284,26.81949747,112.576764,26.81951916,112.5768011,26.81954171,112.5768394,26.81956507,112.5768758,26.81958727,112.5769144,26.81961095,112.5769511,26.81963345,112.576989,26.81965674,112.5770281,26.81968076,112.5770662,26.81970418,112.5771043,26.81972764,112.5771414,26.81975049,112.5771808,26.81977472,112.5772192,26.81979831,112.5772577,26.81982191,112.5772952,26.81984484,112.577335,26.81986907,112.5773736,26.81989259,112.5774123,26.81991606,112.5774498,26.81993877,112.5774882,26.81996205,112.5775276,26.81998588,112.5775644,26.82000825,112.5776031,26.82003178,112.5776393,26.82005387,112.5776772,26.82007712,112.5777137,26.82009957,112.5777488,26.82012121,112.5777907,26.82014706,112.5778261,26.82016891,112.5778652,26.820193,112.577905,26.82021753,112.5779449,26.82024206,112.5779859,26.8202672,112.5780257,26.82029165,112.5780603,26.82031297,112.5780997,26.82033728,112.578138,26.82036083,112.5781768,26.82038473,112.5782161,26.82040883,112.5782537,26.82043183,112.5782895,26.82045365,112.5783251,26.82047532,112.5783596,26.82049637,112.5783979,26.82051971,112.5784329,26.82054099,112.5784705,26.82056384,112.5785066,26.82058588,112.57854,26.82060632,112.5785745,26.82062766,112.5786093,26.82064924,112.5786404,26.82066849,112.5786713,26.82068759,112.5787014,26.82070605,112.5787297,26.82072339,112.5787569,26.82074014,112.5787857,26.8207589,112.5788141,26.82077914,112.5788421,26.82080214,112.5788692,26.8208285,112.578893,26.82085669,112.578913,26.82088621,112.5789302,26.82091859,112.5789438,26.82095338,112.5789539,26.82098972,112.5789601,26.82102729,112.5789619,26.8210634,112.5789595,26.82110054,112.5789525,26.82113842,112.5789405,26.8211768,112.5789249,26.82121207,112.5789047,26.82124716,112.5788828,26.82127905,112.5788587,26.82131182,112.5788364,26.8213422,112.5788121,26.82137567,112.5787872,26.82140995,112.5787614,26.82144538,112.5787355,26.82148084,112.5787084,26.82151799,112.5786832,26.82155261,112.5786581,26.82158701,112.5786326,26.82162203,112.5786075,26.82165672,112.5785815,26.82169273,112.5785547,26.82172993,112.5785284,26.82176648,112.5785021,26.82180326,112.5784763,26.8218394,112.5784498,26.82187675,112.5784225,26.8219154,112.5783962,26.82195248,112.5783691,26.82199081,112.5783411,26.82203039,112.5783137,26.82206924,112.5782862,26.82210834,112.5782587,26.82214764,112.5782353,26.82218122,112.5782077,26.82222088,112.5781836,26.82225567,112.5781588,26.82229152,112.5781347,26.82232641,112.5781077,26.82236534,112.5780829,26.82240132,112.5780587,26.82243632,112.5780345,26.82247136,112.578011,26.82250546,112.5779827,26.82254669,112.5779586,26.82258199,112.5779345,26.82261734,112.5779112,26.82265173,112.5778864,26.82268825,112.577863,26.82272287,112.5778382,26.82275969,112.5778141,26.82279565,112.5777908,26.82283063,112.5777662,26.82286771,112.5777431,26.8229028,112.5777187,26.82294001,112.577695,26.82297621,112.5776713,26.8230124,112.5776476,26.82304855,112.5776247,26.82308364,112.5775972,26.82312593,112.5775744,26.82316101,112.5775477,26.82320226,112.5775237,26.82323937,112.5775004,26.82327543,112.5774737,26.82331663,112.5774504,26.82335271,112.5774237,26.82339398,112.5774004,26.82343015,112.5773771,26.82346637,112.5773538,26.82350264,112.5773311,26.82353795,112.5773045,26.82357962,112.5772805,26.82361727,112.5772579,26.82365292,112.5772305,26.82369605,112.5772038,26.82373828,112.5771804,26.82377537,112.5771576,26.82381151,112.5771335,26.8238499,112.57711,26.82388731,112.5770866,26.82392483,112.5770632,26.82396247,112.5770399,26.82400024,112.5770172,26.82403706,112.5769932,26.8240762,112.5769706,26.82411333,112.5769466,26.82415281,112.5769239,26.82419023,112.5769006,26.8242289,112.5768766,26.82426888,112.5768538,26.82430686,112.5768304,26.82434619,112.5768062,26.82438686,112.5767826,26.82442659,112.576759,26.8244664,112.5767362,26.82450513,112.576712,26.82454613,112.5766887,26.82458599,112.5766654,26.82462584,112.5766429,26.82466453,112.5766198,26.82470431,112.5765961,26.82474519,112.5765731,26.82478489,112.5765508,26.82482342,112.5765272,26.8248642,112.5765044,26.82490376,112.5764823,26.82494211,112.5764597,26.82498158,112.5764365,26.82502214,112.5764141,26.82506156,112.5763923,26.82509987,112.5763694,26.82514046,112.5763479,26.82517884,112.5763253,26.82521944,112.5763041,26.82525765,112.5762819,26.82529789,112.5762605,26.82533679,112.5762399,26.82537422,112.5762184,26.82541343,112.5761953,26.82545571,112.5761739,26.82549472,112.5761508,26.82553699,112.5761295,26.82557604,112.5761059,26.82561945,112.5760853,26.82565746,112.5760653,26.8256944,112.5760443,26.82573355,112.5760238,26.82577161,112.5760035,26.82580955,112.5759834,26.82584724,112.5759607,26.82588994,112.5759383,26.82593221,112.5759161,26.82597406,112.5758938,26.82601648,112.5758733,26.82605542,112.5758519,26.8260963,112.5758305,26.82613716,112.5758087,26.82617896,112.5757879,26.82621856,112.5757669,26.82625897,112.5757456,26.82630002,112.5757251,26.82633968,112.5757048,26.82637922,112.5756853,26.82641773,112.5756651,26.82645798,112.5756464,26.82649596,112.5756275,26.82653452,112.575609,26.82657262,112.5755908,26.82661047,112.5755725,26.82664893,112.575555,26.82668614,112.5755378,26.82672289,112.5755189,26.82676373,112.5755008,26.82680306,112.5754827,26.82684261,112.5754649,26.82688149,112.5754474,26.82691971,112.5754297,26.82695807,112.5754129,26.82699406,112.5753942,26.8270344,112.5753769,26.82707138,112.5753601,26.82710745,112.5753433,26.82714345,112.5753269,26.82717861,112.5753107,26.82721345,112.5752958,26.8272458,112.5752809,26.82727812,112.5752663,26.82730994,112.5752524,26.82734051,112.5752393,26.82736945,112.575226,26.82739794,112.5752118,26.82742821,112.5751971,26.82745922,112.5751817,26.82749174,112.5751666,26.8275242,112.5751515,26.8275565,112.5751352,26.82759177,112.5751203,26.82762466,112.5751043,26.8276599,112.5750881,26.82769574,112.5750729,26.82772944,112.5750574,26.82776339,112.5750421,26.82779694,112.5750261,26.82783198,112.5750105,26.82786635,112.5749952,26.82790045,112.5749799,26.82793441,112.5749647,26.82796847,112.5749503,26.82800031,112.5749367,26.82803037,112.5749241,26.82805848,112.5749101,26.82808862,112.5748948,26.8281212,112.574879,26.82815463,112.5748635,26.82818708,112.5748472,26.8282214,112.5748312,26.82825531,112.574814,26.82829177,112.5747983,26.82832525,112.5747814,26.82836176,112.5747645,26.82839855,112.574748,26.82843472,112.5747317,26.82847055,112.5747144,26.82850911,112.5746971,26.82854794,112.5746795,26.82858784,112.5746636,26.82862412,112.5746474,26.82866127,112.5746311,26.8286993,112.5746145,26.82873817,112.5745982,26.82877687,112.5745814,26.82881732,112.5745645,26.82885843,112.5745476,26.82890018,112.5745304,26.8289424,112.5745128,26.82898606,112.5744961,26.82902786,112.5744789,26.82907101,112.5744616,26.82911452,112.5744436,26.82915967,112.5744281,26.82919867,112.5744125,26.82923804,112.5743967,26.82927771,112.5743813,26.82931649,112.5743654,26.82935656,112.5743471,26.82940243,112.5743307,26.82944378,112.5743129,26.82948851,112.5742967,26.82952975,112.5742814,26.82956861,112.5742631,26.82961532,112.5742459,26.8296596,112.5742301,26.82970036,112.5742151,26.82973993,112.5742002,26.82977939,112.5741854,26.82981876,112.5741692,26.82986254,112.5741527,26.8299073,112.5741363,26.82995202,112.5741217,26.82999225,112.5741054,26.83003703,112.5740891,26.83008201,112.5740748,26.83012154,112.574061,26.8301602,112.5740467,26.83020022,112.5740318,26.83024179,112.5740173,26.83028262,112.5740027,26.83032378,112.5739884,26.83036406,112.5739736,26.83040576,112.5739583,26.83044889,112.5739435,26.83049099,112.5739291,26.83053203,112.5739143,26.83057443,112.5738996,26.83061691,112.573885,26.83065939,112.57387,26.83070302,112.5738554,26.83074539,112.5738409,26.83078771,112.5738269,26.8308288,112.5738121,26.83087228,112.5737977,26.83091457,112.5737834,26.83095689,112.5737692,26.83099924,112.5737555,26.83104042,112.5737416,26.83108282,112.5737276,26.83112527,112.5737134,26.83116903,112.5736999,26.83121044,112.5736861,26.83125311,112.5736724,26.83129583,112.5736587,26.83133862,112.5736452,26.83138146,112.5736317,26.83142437,112.5736183,26.83146737,112.5736045,26.83151168,112.5735913,26.83155482,112.573578,26.83159803,112.5735648,26.83164125,112.5735517,26.83168446,112.573539,26.83172641,112.5735257,26.83177076,112.5735132,26.83181264,112.5735001,26.83185701,112.5734872,26.83190019,112.5734744,26.83194343,112.5734616,26.83198674,112.5734487,26.83203012,112.573436,26.8320736,112.5734232,26.83211711,112.5734109,26.83215929,112.573398,26.83220391,112.5733859,26.832246,112.573373,26.83229048,112.5733606,26.83233362,112.5733483,26.83237662,112.573336,26.83241948,112.5733237,26.83246218,112.5733116,26.83250468,112.5732998,26.83254575,112.5732879,26.83258779,112.5732757,26.83263079,112.5732641,26.8326724,112.5732526,26.83271382,112.5732416,26.83275385,112.5732301,26.83279609,112.573219,26.83283702,112.5732079,26.83287792,112.5731968,26.83291878,112.573186,26.83295848,112.5731747,26.83300056,112.5731637,26.8330415,112.5731527,26.83308249,112.5731421,26.83312245,112.573131,26.83316484,112.5731204,26.8332061,112.5731098,26.83324731,112.5730979,26.83329449,112.5730876,26.83333567,112.5730774,26.83337685,112.5730674,26.83341796,112.5730575,26.83345902,112.5730477,26.83350006,112.5730378,26.83354109,112.5730281,26.833581,112.5730183,26.83362208,112.5730082,26.83366432,112.5729983,26.83370531,112.5729885,26.83374624,112.5729785,26.83378717,112.5729685,26.8338281,112.5729587,26.83386787,112.5729483,26.83391,112.5729369,26.83395684,112.572927,26.83399787,112.5729158,26.83404479,112.5729065,26.83408467,112.5728968,26.83412688,112.5728875,26.83416797,112.5728781,26.83420907,112.5728687,26.83425023,112.5728593,26.83429146,112.5728499,26.83433277,112.5728405,26.83437417,112.5728311,26.83441559,112.5728217,26.83445712,112.5728109,26.83450465,112.5728015,26.83454636,112.5727922,26.83458807,112.572783,26.83462974,112.572774,26.83467145,112.5727651,26.83471318,112.5727564,26.83475493,112.5727478,26.83479672,112.5727393,26.8348385,112.5727311,26.83487906,112.5727225,26.834922,112.5727129,26.83496964,112.5727046,26.83501131,112.5726952,26.83505885,112.5726858,26.83510637,112.5726778,26.83514682,112.5726694,26.83518971,112.5726604,26.83523626,112.572651,26.83528532,112.5726431,26.83532732,112.5726343,26.83537423,112.5726263,26.83541764,112.5726186,26.83545991,112.5726109,26.83550227,112.5726032,26.83554476,112.5725955,26.83558734,112.5725881,26.83562882,112.5725802,26.83567289,112.5725726,26.83571591,112.5725653,26.83575785,112.5725575,26.83580247,112.57255,26.83584605,112.5725425,26.83588981,112.5725352,26.83593248,112.5725275,26.83597781,112.5725202,26.83602077,112.5725125,26.83606641,112.5725052,26.83610966,112.5724976,26.83615563,112.5724904,26.83619918,112.5724828,26.83624548,112.5724754,26.8362907,112.572468,26.83633612,112.5724609,26.83638041,112.5724534,26.8364275,112.5724462,26.83647349,112.5724391,26.83651971,112.5724323,26.83656468,112.5724255,26.83661082,112.5724187,26.83665804,112.5724124,26.83670237,112.5724058,26.83674911,112.5723994,26.83679439,112.5723933,26.8368383,112.5723872,26.83688345,112.5723811,26.83692856,112.572375,26.83697362,112.572369,26.83701871,112.5723627,26.8370651,112.5723568,26.83710893,112.5723507,26.83715406,112.5723446,26.83719921,112.5723385,26.83724439,112.5723325,26.83728967,112.5723264,26.83733635,112.5723206,26.8373818,112.5723149,26.83742737,112.5723092,26.83747304,112.5723036,26.83751881,112.5722983,26.83756338,112.5722929,26.8376094,112.5722875,26.83765684,112.5722823,26.83770308,112.5722773,26.83774945,112.5722725,26.83779601,112.5722678,26.83784277,112.5722633,26.83788973,112.5722588,26.83793682,112.5722543,26.83798399,112.5722497,26.83803128,112.5722451,26.83807868,112.5722402,26.83812616,112.5722352,26.83817373,112.5722301,26.8382214,112.5722251,26.83826772,112.5722199,26.83831666,112.572215,26.83836403,112.5722103,26.83841106,112.5722058,26.83845773,112.5722014,26.83850393,112.5721972,26.83854851,112.5721929,26.83859432,112.5721884,26.83864135,112.572184,26.83868696,112.5721797,26.8387312,112.5721753,26.83877669,112.5721707,26.83882212,112.5721662,26.83886751,112.5721616,26.83891288,112.5721568,26.83895952,112.5721522,26.83900354,112.5721474,26.83905014,112.5721427,26.83909412,112.572138,26.83913936,112.5721333,26.83918457,112.5721286,26.83922975,112.5721238,26.83927622,112.5721192,26.83932139,112.5721145,26.83936654,112.5721098,26.83941167,112.5721051,26.83945547,112.5721002,26.83950183,112.5720954,26.83954687,112.5720907,26.83959058,112.5720858,26.83963502,112.5720807,26.83968067,112.5720758,26.83972506,112.572071,26.83976819,112.5720661,26.83981385,112.5720613,26.83985821,112.5720565,26.83990258,112.5720519,26.83994566,112.5720472,26.83998988,112.5720423,26.84003533,112.5720376,26.84007955,112.5720328,26.84012386,112.5720282,26.840167,112.5720233,26.8402128,112.5720184,26.84025612,112.5720131,26.84030211,112.5720077,26.84034695,112.5720023,26.84039055,112.5719966,26.84043554,112.5719906,26.8404819,112.5719847,26.84052699,112.5719789,26.8405721,112.5719732,26.84061592,112.5719672,26.84066228,112.5719614,26.84070739,112.5719557,26.84075117,112.5719497,26.84079748,112.5719438,26.84084247,112.5719378,26.84088749,112.5719317,26.84093258,112.5719255,26.8409777,112.5719194,26.84102155,112.5719129,26.84106808,112.5719066,26.84111343,112.5719001,26.84115892,112.5718937,26.84120458,112.5718873,26.84124916,112.5718806,26.84129651,112.571874,26.84134262,112.5718675,26.84138874,112.5718608,26.84143489,112.5718543,26.84147982,112.5718473,26.84152753,112.5718406,26.84157434,112.5718338,26.84162116,112.571827,26.84166798,112.5718201,26.84171482,112.5718132,26.84176168,112.5718062,26.84180853,112.571799,26.84185535,112.5717918,26.84190218,112.5717847,26.84194764,112.5717774,26.84199439,112.57177,26.84204102,112.5717624,26.84208882,112.5717551,26.842135,112.571748,26.84218082,112.571741,26.84222489,112.5717337,26.8422711,112.5717265,26.84231576,112.5717193,26.84236021,112.5717122,26.84240319,112.5717047,26.84244857,112.5716978,26.84249013,112.5716902,26.84253673,112.571683,26.84258083,112.5716761,26.8426237,112.5716691,26.84266786,112.5716618,26.84271345,112.5716548,26.84275665,112.5716475,26.84280248,112.5716403,26.8428471,112.571633,26.84289176,112.5716258,26.84293515,112.5716182,26.8429798,112.5716103,26.84302571,112.5716025,26.84307036,112.5715949,26.84311377,112.5715869,26.84315974,112.5715793,26.84320316,112.5715712,26.84324916,112.5715633,26.84329394,112.5715553,26.84333875,112.5715476,26.84338234,112.5715393,26.84342858,112.5715315,26.84347232,112.5715233,26.84351873,112.5715153,26.84356395,112.5715074,26.84360923,112.5714995,26.84365337,112.5714912,26.8437002,112.5714831,26.84374579,112.571475,26.84379143,112.5714669,26.84383711,112.5714587,26.8438828,112.5714505,26.84392853,112.5714423,26.84397429,112.5714343,26.84401877,112.5714258,26.8440659,112.5714176,26.8441118,112.5714093,26.84415776,112.5714009,26.84420378,112.5713925,26.84424984,112.5713842,26.84429593,112.5713758,26.84434205,112.5713676,26.8443869,112.571359,26.8444344,112.5713509,26.8444793,112.5713422,26.84452688,112.5713338,26.84457314,112.5713253,26.84461935,112.571317,26.84466415,112.5713082,26.84471147,112.5712998,26.84475603,112.5712908,26.8448031,112.5712818,26.84484878,112.5712726,26.84489446,112.5712634,26.84493882,112.5712539,26.84498451,112.571244,26.84503151,112.5712344,26.84507722,112.5712247,26.84512285,112.571215,26.84516837,112.5712056,26.84521246,112.5711957,26.84525888,112.5711865,26.84530236,112.5711768,26.84534804,112.5711673,26.84539214,112.5711581,26.84543471,112.5711487,26.84547826,112.571139,26.84552282,112.5711298,26.84556473,112.5711205,26.84560765,112.5711094,26.84565769,112.5711001,26.84569896,112.5710906,26.84574134,112.5710807,26.84578481,112.5710712,26.845827,112.5710616,26.84586907,112.5710521,26.84591106,112.5710431,26.84595172,112.5710323,26.84600064,112.5710232,26.84604221,112.5710128,26.84608957,112.5710037,26.84613087,112.5709946,26.84617214,112.5709854,26.8462134,112.5709763,26.84625465,112.5709672,26.84629582,112.570958,26.84633685,112.5709476,26.84638355,112.5709371,26.84642991,112.5709267,26.84647585,112.5709174,26.84651581,112.5709081,26.8465556,112.5708976,26.84659976,112.5708866,26.84664595,112.5708764,26.84668976,112.5708658,26.84673575,112.5708558,26.8467794,112.5708455,26.84682522,112.570836,26.84686882,112.570826,26.84691518,112.5708163,26.84696026,112.5708066,26.84700418,112.5707964,26.84705038,112.5707865,26.84709444,112.5707758,26.84714031,112.5707649,26.84718482,112.5707539,26.84722957,112.5707432,26.84727344,112.5707332,26.84731397,112.5707221,26.84735914,112.5707124,26.84739878,112.5707014,26.84744421,112.5706908,26.84748863,112.5706798,26.84753517,112.5706693,26.84757924,112.5706585,26.84762413,112.5706477,26.84766855,112.5706365,26.8477134,112.5706258,26.84775556,112.5706145,26.8477995,112.5706039,26.84784073,112.5705931,26.84788232,112.5705824,26.84792412,112.5705709,26.84796921,112.5705607,26.84800877,112.5705505,26.84804796,112.5705404,26.84808688,112.5705302,26.84812575,112.5705201,26.84816464,112.5705102,26.8482027,112.5704998,26.84824295,112.5704882,26.84828748,112.5704779,26.84832742,112.5704675,26.84836772,112.5704572,26.84840838,112.5704468,26.8484494,112.5704366,26.84848975,112.5704257,26.84853252,112.5704151,26.84857458,112.5704046,26.84861591,112.5703934,26.84865968,112.5703825,26.84870272,112.5703715,26.84874608,112.5703607,26.84878861,112.5703493,26.84883365,112.5703381,26.84887792,112.5703271,26.84892137,112.5703159,26.84896625,112.5703043,26.84901253,112.5702932,26.84905668,112.5702818,26.84910205,112.5702699,26.84914862,112.5702583,26.84919407,112.570248,26.84923387,112.5702366,26.84927827,112.5702249,26.84932388,112.5702129,26.84937066,112.5702026,26.84941056,112.570191,26.84945605,112.5701797,26.84950019,112.5701679,26.8495464,112.5701565,26.84959133,112.570145,26.84963618,112.570135,26.84967543,112.5701235,26.84972039,112.5701119,26.84976556,112.5701018,26.84980523,112.5700904,26.8498496,112.5700788,26.84989509,112.5700673,26.84994037,112.5700558,26.84998543,112.5700441,26.85003142,112.5700328,26.85007603,112.5700216,26.85012033,112.5700109,26.85016313,112.5699998,26.85020753,112.5699894,26.85024901,112.5699787,26.85029197,112.5699684,26.85033356,112.5699584,26.85037394,112.5699483,26.85041524,112.5699381,26.85045745,112.5699282,26.85049851,112.5699184,26.85053943,112.5699088,26.8505802,112.5698993,26.85062075,112.5698899,26.85066102,112.5698808,26.85070076,112.5698709,26.8507441,112.5698615,26.85078546,112.5698527,26.85082356,112.5698434,26.85086429,112.5698344,26.85090363,112.5698259,26.85094065,112.5698172,26.85097788,112.5698084,26.85101497,112.5698,26.85105005,112.5697919,26.85108314,112.5697842,26.8511138,112.5697767,26.85114401,112.5697686,26.85117697,112.5697602,26.85121048,112.5697515,26.85124505,112.5697425,26.85128118,112.5697337,26.8513163,112.5697242,26.85135425,112.5697152,26.8513906,112.5697064,26.85142572,112.5696974,26.85146147,112.5696879,26.85149941,112.5696783,26.85153659,112.5696681,26.85157572,112.5696578,26.85161485,112.5696472,26.8516542,112.5696371,26.85169159,112.5696266,26.85172999,112.5696155,26.85177033,112.5696046,26.85181023,112.5695929,26.85185299,112.5695823,26.85189162,112.5695719,26.85193022,112.569561,26.85197066,112.5695497,26.85201321,112.5695382,26.85205596,112.5695279,26.85209482,112.5695174,26.85213436,112.5695067,26.85217449,112.5694959,26.85221516,112.569485,26.85225633,112.5694743,26.85229688,112.5694633,26.85233886,112.5694524,26.85238113,112.5694413,26.85242466,112.5694308,26.8524661,112.5694198,26.85250956,112.5694092,26.85255178,112.5693988,26.85259279,112.569388,26.85263469,112.5693769,26.85267757,112.569366,26.8527194,112.5693554,26.85276025,112.5693443,26.85280333,112.5693334,26.85284558,112.5693225,26.85288805,112.5693117,26.85292966,112.5693002,26.85297363,112.5692891,26.85301569,112.5692777,26.85305902,112.569266,26.85310356,112.5692546,26.85314714,112.5692431,26.85319091,112.5692317,26.85323497,112.5692202,26.85327933,112.5692087,26.85332392,112.5691972,26.85336863,112.5691858,26.85341325,112.5691749,26.85345641,112.5691636,26.85350087,112.5691531,26.85354275,112.569143,26.85358335,112.5691331,26.85362307,112.5691222,26.85366725,112.5691124,26.85370644,112.5691027,26.85374561,112.569093,26.85378487,112.5690831,26.85382439,112.5690719,26.85386919,112.5690621,26.85390839,112.5690516,26.85395007,112.5690412,26.85399127,112.5690308,26.85403196,112.5690199,26.85407429,112.5690085,26.85411835,112.5689974,26.85416091,112.5689856,26.85420639,112.5689743,26.8542504,112.5689637,26.85429169,112.5689535,26.85433115,112.5689427,26.85437326,112.5689326,26.85441331,112.568922,26.8544548,112.568911,26.8544977,112.5689005,26.85453841,112.5688894,26.8545817,112.568879,26.85462277,112.5688678,26.85466638,112.5688567,26.85470901,112.5688457,26.8547519,112.5688345,26.85479502,112.5688235,26.8548371,112.5688122,26.85488059,112.5688006,26.85492545,112.5687893,26.85496911,112.5687782,26.85501151,112.5687664,26.85505634,112.568755,26.85509972,112.5687435,26.85514281,112.5687322,26.85518554,112.5687208,26.85522789,112.5687097,26.85526979,112.5686988,26.85531119,112.5686882,26.85535218,112.5686777,26.85539307,112.5686676,26.85543275,112.5686555,26.85548062,112.5686452,26.8555216,112.5686348,26.85556272,112.5686242,26.85560399,112.5686136,26.85564545,112.5686028,26.85568712,112.568592,26.855729,112.5685811,26.85577112,112.5685701,26.85581347,112.5685591,26.85585607,112.5685481,26.85589891,112.568537,26.85594198,112.5685261,26.85598526,112.5685154,26.85602751,112.568504,26.85607247,112.568493,26.85611635,112.5684822,26.85615918,112.5684712,26.85620345,112.5684604,26.85624665,112.5684487,26.85629386,112.568438,26.85633727,112.5684268,26.85638327,112.568416,26.85642808,112.5684053,26.85647302,112.5683947,26.85651807,112.5683842,26.85656321,112.5683738,26.85660839,112.5683637,26.85665351,112.568354,26.8566972,112.5683439,26.85674318,112.5683342,26.85678752,112.5683248,26.85683053,112.5683149,26.85687604,112.5683053,26.85692029,112.5682957,26.85696459,112.5682862,26.85700893,112.5682767,26.85705329,112.5682672,26.85709769,112.5682579,26.85714209,112.5682488,26.8571852,112.5682394,26.85723081,112.5682305,26.8572739,112.5682215,26.85731824,112.5682123,26.85736381,112.5682036,26.85740683,112.5681948,26.85745103,112.5681859,26.85749648,112.5681773,26.85754054,112.568169,26.85758313,112.5681604,26.8576279,112.568152,26.85767111,112.5681425,26.85772013,112.5681341,26.85776279,112.5681257,26.85780527,112.5681174,26.85784767,112.5681094,26.85788874,112.5681013,26.85793112,112.5680933,26.85797353,112.5680849,26.8580172,112.5680771,26.85805841,112.5680686,26.85810201,112.5680605,26.8581444,112.5680523,26.85818672,112.5680441,26.85822898,112.5680359,26.85827112,112.5680278,26.85831313,112.5680202,26.85835379,112.5680122,26.85839662,112.5680046,26.85843805,112.5679972,26.85847932,112.5679899,26.85852052,112.5679818,26.85856636,112.5679745,26.85860858,112.5679665,26.85865545,112.5679588,26.8587011,112.567951,26.85874787,112.5679442,26.85878995,112.5679376,26.85883087,112.5679301,26.85887767,112.5679228,26.85892331,112.5679156,26.85897016,112.5679081,26.85901824,112.5679019,26.85905934,112.5678958,26.85910045,112.5678899,26.85914155,112.5678832,26.85918852,112.5678766,26.85923428,112.5678697,26.85928233,112.5678631,26.85932918,112.5678564,26.859376,112.5678505,26.85941691,112.5678441,26.85946248,112.5678372,26.85951028,112.5678314,26.85955104,112.5678251,26.85959643,112.5678187,26.85964302,112.5678123,26.8596896,112.5678067,26.85973154,112.5678013,26.85977234,112.5677951,26.85981906,112.5677898,26.85986003,112.5677839,26.85990581,112.5677779,26.85995296,112.5677725,26.85999563,112.5677668,26.86004212,112.5677617,26.86008411,112.5677566,26.86012636,112.5677515,26.86017008,112.5677466,26.86021286,112.5677419,26.86025591,112.5677373,26.86029923,112.5677327,26.86034278,112.5677282,26.86038529,112.5677236,26.86043051,112.5677192,26.86047342,112.5677146,26.86051896,112.5677102,26.86056344,112.5677058,26.86060811,112.5677013,26.86065295,112.5676968,26.86069794,112.5676924,26.86074306,112.5676879,26.86078835,112.5676836,26.8608324,112.5676792,26.86087911,112.567675,26.86092323,112.5676707,26.86096996,112.5676667,26.86101413,112.5676625,26.86106091,112.5676586,26.86110507,112.5676547,26.86115052,112.5676509,26.86119722,112.5676471,26.86124256,112.5676436,26.86128659,112.5676401,26.86133193,112.5676365,26.86137856,112.567633,26.86142383,112.5676298,26.86146768,112.5676264,26.86151389,112.5676232,26.86155733,112.5676199,26.86160315,112.5676169,26.86164637,112.5676139,26.86169085,112.567611,26.8617353,112.5676082,26.86177972,112.5676055,26.8618241,112.567603,26.86186844,112.5676005,26.86191278,112.5675981,26.86195711,112.5675956,26.86200143,112.5675931,26.86204698,112.5675907,26.86209002,112.5675883,26.86213433,112.5675859,26.86217863,112.5675836,26.86222282,112.5675814,26.86226677,112.5675792,26.86231036,112.5675767,26.86236083,112.5675747,26.86240343,112.5675729,26.86244457,112.5675711,26.86248692,112.5675695,26.8625294,112.567568,26.8625734,112.5675665,26.86261653,112.5675649,26.86266005,112.5675634,26.86270397,112.5675619,26.86274699,112.5675604,26.8627929,112.5675589,26.86283793,112.5675573,26.86288327,112.5675557,26.86292896,112.5675542,26.86297495,112.5675527,26.86302126,112.5675513,26.8630665,112.5675498,26.86311466,112.5675484,26.86316171,112.567547,26.86320891,112.5675455,26.86325623,112.5675442,26.86330222,112.567543,26.86335091,112.567542,26.86339822,112.5675411,26.86344545,112.5675403,26.86349126,112.5675397,26.86353966,112.5675393,26.86358666,112.5675392,26.86363231,112.5675391,26.86368061,112.5675392,26.86372751,112.5675393,26.86377292,112.5675394,26.86381943,112.5675396,26.86386562,112.5675399,26.86391154,112.5675403,26.86395865,112.5675408,26.86400441,112.5675413,26.86405016,112.5675417,26.8640946,112.5675422,26.86414172,112.5675425,26.86418629,112.5675429,26.86423223,112.5675434,26.86427959,112.5675438,26.86432449,112.5675443,26.86437088,112.567545,26.86441879,112.5675456,26.86446553,112.5675463,26.86451242,112.567547,26.86455813,112.5675478,26.86460532,112.5675487,26.86465255,112.5675497,26.86469973,112.5675508,26.86474818,112.5675518,26.8647952,112.5675528,26.86484079,112.5675538,26.86488894,112.5675547,26.86493564,112.5675556,26.8649809,112.5675565,26.86502875,112.5675575,26.86507392,112.5675586,26.86512044,112.5675598,26.86516698,112.5675611,26.86521358,112.5675624,26.86526024,112.5675639,26.8653083,112.5675654,26.86535509,112.5675669,26.86540063,112.5675684,26.86544893,112.5675698,26.86549465,112.5675713,26.86554177,112.5675728,26.86558895,112.5675744,26.86563619,112.567576,26.86568345,112.5675777,26.86573073,112.5675794,26.86577797,112.5675811,26.86582519,112.5675828,26.86587235,112.5675845,26.86591946,112.5675862,26.86596643,112.5675879,26.86601314,112.5675896,26.86605953,112.5675914,26.86610556,112.5675931,26.8661511,112.5675948,26.86619611,112.5675965,26.86624066,112.5675981,26.86628506,112.5675997,26.86632938,112.5676012,26.8663736,112.5676026,26.86641774,112.567604,26.86646184,112.5676053,26.86650591,112.5676066,26.86654994,112.567608,26.86659387,112.5676093,26.86663766,112.5676107,26.86668755,112.5676122,26.86673861,112.5676135,26.86678214,112.5676148,26.86682564,112.5676161,26.86686787,112.5676175,26.86691253,112.5676188,26.86695465,112.5676203,26.86699922,112.5676217,26.86704242,112.5676234,26.86709151,112.5676248,26.86713429,112.5676263,26.867177,112.5676277,26.86721962,112.5676292,26.86726217,112.5676306,26.86730467,112.5676321,26.86734711,112.5676336,26.8673895,112.5676351,26.86743181,112.5676366,26.8674741,112.5676382,26.8675163,112.5676398,26.86755835,112.5676415,26.86760491,112.5676433,26.86765356,112.567645,26.86769974,112.5676466,26.86774824,112.5676482,26.86779427,112.5676499,26.86784246,112.5676513,26.86788327,112.5676529,26.86792937,112.5676544,26.86797508,112.567656,26.86801958,112.5676575,26.86806627,112.5676588,26.86811174,112.56766,26.86815602,112.5676612,26.86820255,112.5676624,26.86824785,112.5676636,26.86829295,112.5676648,26.86833755,112.567666,26.86838151,112.5676672,26.86842482,112.5676684,26.8684664,112.5676697,26.86850838,112.5676711,26.86855089,112.5676725,26.86859187,112.567674,26.86863133,112.5676758,26.86867703,112.5676775,26.8687205,112.5676792,26.86876492,112.567681,26.86881031,112.5676825,26.86884977,112.5676843,26.86889408,112.567686,26.86893806,112.5676878,26.86898149,112.5676896,26.86902318,112.5676916,26.86906601,112.5676934,26.8691061,112.5676951,26.86914758,112.5676967,26.86918727,112.5676983,26.86922862,112.5676999,26.86926787,112.5677015,26.86930793,112.5677032,26.86934797,112.5677049,26.86938941,112.5677064,26.86942616,112.5677079,26.86946374,112.5677094,26.86950196,112.5677106,26.86954073,112.5677116,26.86957671,112.5677125,26.86961395,112.5677133,26.86965285,112.5677139,26.86968931,112.5677145,26.86972855,112.5677152,26.8697684,112.5677158,26.86980514,112.5677164,26.86984473,112.5677172,26.8698842,112.567718,26.86992669,112.5677189,26.86996511,112.5677198,26.8700034,112.5677211,26.87004334,112.5677225,26.87008406,112.5677242,26.87012649,112.567726,26.8701677,112.5677276,26.87020653,112.5677294,26.87024957,112.5677313,26.87029304,112.5677331,26.8703369,112.5677348,26.87038102,112.5677365,26.87042525,112.567738,26.87046473,112.5677394,26.8705044,112.5677409,26.8705492,112.5677422,26.87058911,112.5677437,26.87063399,112.5677452,26.87067786,112.5677468,26.87072362,112.5677482,26.87076329,112.5677498,26.87080678,112.5677515,26.87085218,112.5677531,26.87089667,112.5677545,26.87093638,112.5677562,26.87098112,112.5677578,26.87102582,112.5677592,26.87107049,112.5677606,26.87111427,112.567762,26.87115923,112.5677631,26.87120044,112.5677642,26.87123993,112.5677654,26.87128176,112.5677665,26.87132284,112.5677676,26.8713641,112.5677689,26.87140948,112.5677702,26.87145066,112.5677716,26.87149177,112.5677732,26.87153386,112.5677748,26.87157488,112.5677765,26.87161593,112.5677786,26.8716622,112.5677808,26.87170338,112.5677835,26.87174867,112.5677865,26.87179597,112.5677896,26.87184229,112.5677925,26.87188359,112.5677954,26.87192509,112.5677982,26.8719657,112.5678013,26.87200843,112.5678045,26.87205014,112.5678077,26.87209078,112.5678113,26.87213258,112.567815,26.87217562,112.5678187,26.8722168,112.5678227,26.87225928,112.5678271,26.8723031,112.5678317,26.87234609,112.5678365,26.87238934,112.5678416,26.87243287,112.5678467,26.87247555,112.5678524,26.87252062,112.567858,26.87256366,112.5678641,26.87260796,112.5678706,26.87265354,112.5678773,26.87269815,112.5678839,26.8727407,112.5678915,26.87278791,112.567899,26.87283305,112.5679065,26.8728772,112.5679145,26.87292261,112.5679226,26.87296804,112.567931,26.87301448,112.5679391,26.87305842,112.5679478,26.87310415,112.5679564,26.87314812,112.5679649,26.87319042,112.5679736,26.87323363,112.5679826,26.87327784,112.5679916,26.87332101,112.5680006,26.87336323,112.5680102,26.87340774,112.5680196,26.87345008,112.5680296,26.8734945,112.5680396,26.87353764,112.5680496,26.87357952,112.5680603,26.87362338,112.5680708,26.87366498,112.5680817,26.87370763,112.5680931,26.87375136,112.5681043,26.87379404,112.5681154,26.87383572,112.5681271,26.87387854,112.5681393,26.87392248,112.5681511,26.87396431,112.5681637,26.87400834,112.5681759,26.87405007,112.5681886,26.8740926,112.5682013,26.87413495,112.5682144,26.87417813,112.5682272,26.87421989,112.56824,26.87426146,112.5682525,26.87430187,112.5682659,26.87434423,112.5682791,26.87438543,112.5682921,26.87442549,112.5683057,26.87446646,112.56832,26.87450832,112.568334,26.87454804,112.5683486,26.87458865,112.568364,26.87463007,112.5683791,26.87467028,112.5683941,26.87470935,112.56841,26.87475022,112.5684256,26.87478982,112.5684413,26.87482925,112.5684568,26.87486759,112.5684732,26.87490781,112.568489,26.87494607,112.5685057,26.87498631,112.5685218,26.87502462,112.5685388,26.87506496,112.5685556,26.87510438,112.5685721,26.87514287,112.5685892,26.8751824,112.5686068,26.87522304,112.568624,26.87526283,112.568641,26.87530174,112.5686592,26.87534279,112.568677,26.87538192,112.5686957,26.87542207,112.5687154,26.87546328,112.5687351,26.87550355,112.568755,26.87554395,112.5687746,26.87558345,112.5687955,26.87562508,112.5688159,26.87566582,112.5688355,26.87570463,112.5688567,26.87574661,112.568878,26.87578862,112.5688985,26.87582857,112.5689196,26.87586951,112.568941,26.87591038,112.5689627,26.87595119,112.5689853,26.87599293,112.569007,26.8760326,112.5690296,26.87607324,112.56905,26.8761098,112.5690701,26.87614531,112.5690904,26.87618078,112.5691108,26.87621621,112.5691343,26.87625667,112.5691573,26.87629595,112.5691788,26.87633201,112.5692021,26.87637086,112.5692267,26.87641147,112.5692478,26.87644601,112.5692713,26.87648445,112.5692954,26.87652374,112.5693195,26.87656287,112.5693444,26.87660277,112.5693688,26.87664153,112.5693928,26.87667913,112.5694177,26.8767176,112.5694428,26.87675601,112.5694681,26.87679436,112.5694934,26.8768325,112.5695192,26.87687128,112.5695444,26.87690883,112.5695692,26.87694517,112.5695956,26.87698314,112.5696213,26.8770199,112.5696464,26.87705539,112.569672,26.87709121,112.5696972,26.87712641,112.569723,26.87716213,112.5697476,26.8771959,112.5697728,26.87723028,112.5697986,26.87726528,112.5698239,26.8772992,112.5698491,26.87733279,112.5698735,26.87736502,112.5698982,26.87739742,112.5699227,26.87742931,112.5699511,26.87746567,112.5699759,26.87749705,112.5700034,26.87753144,112.5700292,26.87756355,112.5700572,26.87759807,112.5700836,26.87763027,112.5701094,26.87766161,112.5701346,26.87769192,112.5701602,26.87772271,112.5701894,26.87775754,112.5702175,26.8777908,112.5702444,26.8778225,112.5702724,26.87785521,112.570299,26.87788639,112.5703262,26.87791827,112.5703535,26.87795024,112.5703812,26.87798232,112.570409,26.87801452,112.5704378,26.87804762,112.5704656,26.87807942,112.5704943,26.87811207,112.5705239,26.87814573,112.57055,26.87817517,112.5705795,26.87820838,112.5706086,26.87824094,112.5706386,26.87827435,112.570666,26.87830487,112.5706921,26.87833411,112.5707197,26.87836502,112.5707467,26.8783954,112.570773,26.87842527,112.5708042,26.87846069,112.5708307,26.87849089,112.5708578,26.87852192,112.5708848,26.8785529,112.570912,26.87858398,112.5709392,26.87861513,112.5709665,26.87864642,112.5709939,26.87867787,112.5710219,26.8787103,112.5710486,26.87874138,112.5710768,26.87877439,112.5711043,26.87880694,112.571132,26.87883986,112.5711591,26.87887224,112.5711876,26.87890658,112.5712147,26.87893953,112.5712425,26.87897356,112.5712712,26.87900876,112.5712984,26.87904251,112.5713269,26.87907826,112.5713541,26.8791125,112.5713825,26.87914884,112.57141,26.87918475,112.5714367,26.8792201,112.571464,26.87925676,112.5714918,26.87929472,112.5715181,26.87933117,112.5715449,26.87936889,112.5715714,26.87940687,112.5715983,26.8794462,112.5716211,26.87948,112.5716464,26.87951792,112.5716723,26.87955689,112.5716984,26.87959697,112.5717229,26.87963516,112.5717477,26.87967437,112.5717729,26.87971472,112.5717972,26.87975423,112.5718185,26.8797889,112.5718396,26.87982372,112.5718608,26.87985863,112.5718819,26.87989362,112.571903,26.87992869,112.5719239,26.87996384,112.5719447,26.87999908,112.5719653,26.88003445,112.5719887,26.88007503,112.5720089,26.88011061,112.572029,26.88014626,112.5720489,26.88018204,112.5720709,26.88022205,112.5720934,26.88026317,112.5721136,26.8803002,112.572136,26.88034131,112.5721555,26.88037712,112.5721749,26.88041272,112.5721961,26.88045213,112.5722175,26.8804922,112.572239,26.88053295,112.5722596,26.88057256,112.5722793,26.88061094,112.5722997,26.88065126,112.5723193,26.88069069,112.5723382,26.88072932,112.5723575,26.88076921,112.5723772,26.88081047,112.5723963,26.88085103,112.5724146,26.88089089,112.5724336,26.88093314,112.5724515,26.88097353,112.5724694,26.88101512,112.5724872,26.88105683,112.5725052,26.88109967,112.5725227,26.8811415,112.5725395,26.88118231,112.572557,26.88122519,112.5725734,26.88126585,112.5725904,26.88130857,112.5726065,26.88134921,112.5726229,26.88139095,112.5726396,26.88143384,112.5726552,26.88147476,112.5726711,26.88151689,112.5726866,26.8815592,112.5727023,26.88160268,112.5727169,26.88164415,112.5727321,26.88168776,112.5727464,26.88173044,112.57276,26.88177213,112.5727736,26.88181505,112.5727873,26.88185923,112.5728003,26.8819025,112.5728126,26.88194482,112.5728253,26.88198937,112.572837,26.88203166,112.5728489,26.88207502,112.5728608,26.88211844,112.5728729,26.882163,112.5728846,26.88220661,112.5728961,26.88224934,112.5729081,26.88229451,112.5729196,26.88233889,112.572931,26.88238354,112.5729418,26.88242734,112.5729529,26.88247365,112.5729622,26.88251337,112.5729727,26.88255892,112.5729816,26.88259894,112.5729912,26.88264369,112.5730007,26.8826898,112.5730102,26.88273723,112.5730191,26.8827836,112.5730274,26.88282886,112.5730357,26.88287527,112.573043,26.88291695,112.5730506,26.88296203,112.5730574,26.8830035,112.5730637,26.88304359,112.5730707,26.88308921,112.5730772,26.88313361,112.5730837,26.88318019,112.5730898,26.88322456,112.5730956,26.88327006,112.573101,26.88331559,112.573106,26.8833612,112.5731108,26.88340803,112.5731151,26.88345264,112.5731193,26.88349962,112.5731233,26.88354552,112.573127,26.88359032,112.5731309,26.88363636,112.5731351,26.8836824,112.5731394,26.8837294,112.573143,26.88377382,112.5731465,26.88382025,112.5731496,26.88386438,112.5731524,26.88390964,112.5731552,26.88395614,112.5731577,26.88400177,112.57316,26.88404771,112.5731619,26.88409275,112.5731635,26.88414031,112.5731646,26.88418646,112.5731655,26.88422689,112.5731662,26.88426731,112.573167,26.88431228,112.5731677,26.88435821,112.5731684,26.8844051,112.573169,26.88444973,112.5731696,26.88449555,112.5731703,26.88454143,112.5731709,26.88458853,112.5731715,26.88463453,112.5731721,26.88467941,112.5731728,26.88472542,112.5731736,26.88477119,112.5731744,26.88481672,112.5731753,26.88486222,112.5731762,26.88490886,112.5731771,26.88495433,112.5731779,26.8849986,112.5731787,26.88504505,112.5731794,26.88509026,112.5731799,26.88513432,112.5731805,26.8851807,112.5731811,26.88522601,112.5731816,26.88526913,112.573182,26.8853157,112.5731824,26.8853622,112.5731827,26.88540748,112.573183,26.88545269,112.5731833,26.88549665,112.5731835,26.88554242,112.5731839,26.885587,112.5731845,26.88563051,112.5731855,26.8856763,112.5731867,26.88571988,112.5731879,26.88576573,112.5731892,26.88580938,112.5731906,26.88585532,112.573192,26.88590019,112.5731937,26.88594398,112.5731957,26.8859888,112.5731981,26.88603332,112.5732009,26.88607752,112.5732041,26.88612163,112.5732075,26.88616681,112.5732105,26.88620981,112.5732134,26.886254,112.573216,26.8862994,112.5732182,26.88634383,112.5732201,26.88638838,112.573222,26.88643187,112.5732235,26.8864765,112.5732247,26.88652111,112.5732257,26.8865668,112.5732264,26.88661012,112.5732272,26.88665429,112.5732279,26.8866991,112.5732287,26.88674112,112.5732294,26.88678376,112.5732302,26.88682736,112.5732311,26.88686979,112.573232,26.88691107,112.5732329,26.88695441,112.5732338,26.88699665,112.5732348,26.88703772,112.5732358,26.88707964,112.5732369,26.88712224,112.5732379,26.88716342,112.5732389,26.88720337,112.57324,26.88724526,112.5732411,26.88728608,112.5732423,26.88732683,112.5732435,26.88737261,112.5732447,26.88741327,112.573246,26.88745799,112.5732472,26.88749974,112.5732483,26.88754058,112.5732495,26.88758659,112.5732505,26.88762748,112.5732515,26.88766725,112.5732527,26.88771383,112.5732537,26.88775403,112.5732548,26.88779323,112.5732559,26.88783443,112.573257,26.88787467,112.5732581,26.88791397,112.5732592,26.88795426,112.5732604,26.88799539,112.5732615,26.8880351,112.5732628,26.88807811,112.5732642,26.88812219,112.5732656,26.88816439,112.5732669,26.88820476,112.5732681,26.88824514,112.5732693,26.88828462,112.5732704,26.88832748,112.5732712,26.88836919,112.573272,26.88841039,112.573273,26.88845229,112.5732744,26.88849209,112.5732763,26.88853272,112.5732786,26.8885709,112.5732813,26.88860951,112.5732843,26.88864863,112.5732876,26.88868959,112.5732905,26.88872781,112.5732929,26.88876477,112.5732951,26.88880399";
+    private static final String ROMA_ROAD_1 = ",112.5732967,26.88884312,112.573298,26.88888136,112.5732992,26.88892276,112.5733003,26.8889593,112.5733014,26.88899739,112.5733025,26.8890355,112.5733035,26.88907108,112.5733047,26.88910874,112.5733058,26.88914569,112.5733066,26.88917961,112.5733074,26.88921312,112.5733083,26.88924725,112.5733091,26.88928032,112.5733103,26.88931571,112.5733115,26.88934913,112.5733125,26.88938455,112.5733134,26.88941967,112.5733143,26.8894553,112.5733152,26.88949305,112.573316,26.88953007,112.5733168,26.88956712,112.5733176,26.88960438,112.5733185,26.88964099,112.5733192,26.88967683,112.5733199,26.8897127,112.5733206,26.88974841,112.5733212,26.88978519,112.5733219,26.88982266,112.5733226,26.88985869,112.5733237,26.88989748,112.5733249,26.88993489,112.5733263,26.88997389,112.5733277,26.8900134,112.573329,26.8900502,112.5733303,26.89008916,112.5733317,26.89012966,112.5733332,26.89017157,112.5733347,26.89021087,112.5733361,26.89025122,112.5733373,26.89029287,112.5733381,26.89033146,112.5733386,26.89037135,112.5733389,26.89040761,112.5733389,26.89044447,112.5733388,26.89048254,112.5733387,26.89051882,112.5733386,26.89055676,112.5733386,26.8905955,112.5733387,26.89063273,112.5733388,26.89067132,112.5733391,26.89071264,112.5733393,26.89075182,112.5733397,26.89079314,112.5733402,26.89083474,112.5733409,26.89087733,112.5733415,26.89091545,112.5733423,26.89096038,112.5733432,26.8910007,112.5733441,26.89104087,112.573345,26.89108273,112.5733458,26.89112539,112.5733466,26.89116976,112.5733473,26.89121255,112.5733479,26.89125243,112.5733484,26.89129414,112.573349,26.89133951,112.5733495,26.89138274,112.5733501,26.89142482,112.5733507,26.89146856,112.5733513,26.89150994,112.573352,26.89155147,112.5733526,26.89159204,112.5733532,26.89163237,112.5733538,26.89167485,112.5733543,26.89171622,112.5733548,26.89175582,112.5733552,26.89179554,112.5733555,26.89183582,112.5733557,26.89187439,112.5733559,26.89191337,112.5733562,26.89195256,112.5733565,26.89199002,112.5733569,26.89203278,112.5733573,26.89207054,112.5733578,26.89210966,112.5733582,26.89214979,112.5733586,26.89219126,112.5733589,26.89223355,112.5733593,26.89227699,112.5733597,26.89231949,112.5733601,26.89236064,112.5733606,26.89240248,112.5733612,26.89244543,112.5733618,26.89248381,112.5733625,26.89252191,112.5733633,26.89256242,112.573364,26.89260178,112.5733649,26.89264348,112.5733658,26.89268478,112.5733666,26.89272566,112.5733673,26.89276889,112.573368,26.89281071,112.5733688,26.89285489,112.5733695,26.89289371,112.5733705,26.89293683,112.5733713,26.8929815,112.5733722,26.89302808,112.5733729,26.89306938,112.5733733,26.89311028,112.5733737,26.89315388,112.5733739,26.89319699,112.573374,26.89323947,112.5733742,26.89328454,112.5733746,26.89332775,112.5733751,26.89337233,112.5733757,26.89341704,112.5733763,26.89346293,112.573377,26.89350663,112.5733776,26.8935515,112.573378,26.89359639,112.5733785,26.89364237,112.5733789,26.89368712,112.5733794,26.8937306,112.5733801,26.89377614,112.5733808,26.89382037,112.5733815,26.89386435,112.5733822,26.89390691,112.573383,26.89395145,112.5733837,26.89399472,112.5733844,26.89403673,112.5733851,26.89407956,112.5733857,26.89412318,112.5733862,26.89416548,112.5733868,26.89420647,112.5733873,26.8942483,112.5733878,26.89428988,112.5733883,26.89433615,112.5733888,26.8943777,112.5733893,26.89441781,112.5733899,26.89446164,112.5733907,26.89450614,112.5733915,26.89455137,112.5733923,26.89459049,112.5733931,26.89463334,112.5733939,26.89467329,112.5733947,26.89471224,112.5733956,26.89475591,112.5733964,26.89479847,112.5733971,26.89484176,112.5733979,26.89488484,112.5733985,26.89492867,112.5733989,26.8949712,112.5733991,26.89501312,112.5733994,26.89505325,112.5733996,26.89509321,112.5733999,26.89513677,112.5734002,26.89517651,112.5734006,26.89521431,112.573401,26.89525288,112.5734013,26.89529152,112.5734017,26.89533116,112.5734021,26.89536936,112.5734025,26.89540959,112.5734029,26.89545278,112.5734034,26.89549274,112.5734039,26.89553381,112.5734043,26.89557331,112.5734049,26.89561481,112.5734053,26.89565445,112.5734057,26.89569472,112.5734059,26.89573454,112.5734062,26.8957736,112.5734064,26.89581245,112.5734065,26.89585335,112.5734066,26.89589289,112.5734068,26.89593014,112.573407,26.89596891,112.5734072,26.89600663,112.5734071,26.89604329,112.5734065,26.89607874,112.5734033,26.8961115,112.5733885,26.89614048,112.5733594,26.89615626,112.5733261,26.89616072,112.5732919,26.89616149,112.5732556,26.89616183,112.573221,26.89616196,112.5731862,26.89616097,112.5731528,26.89615707,112.57312,26.89614683,112.5730933,26.89612524,112.5730807,26.89609266,112.5730791,26.89605794,112.5730796,26.89602181,112.5730799,26.89598458,112.57308,26.89594866,112.5730801,26.89591138,112.5730804,26.89586999,112.5730807,26.89583017,112.5730809,26.89579278,112.5730809,26.89575293,112.5730811,26.89571153,112.5730813,26.89566893,112.5730815,26.89562531,112.5730817,26.89558522,112.5730818,26.89554443,112.5730816,26.89550201,112.5730812,26.89546086,112.5730807,26.89541728,112.5730801,26.89537506,112.5730794,26.89533041,112.5730788,26.89528732,112.5730781,26.89524696,112.5730773,26.89520359,112.5730763,26.89515832,112.5730753,26.89511534,112.5730741,26.895072,112.573073,26.89502936,112.573072,26.89498744,112.573071,26.89494533,112.5730702,26.89490572,112.5730693,26.89486505,112.5730684,26.89482173,112.5730676,26.89478014,112.573067,26.89473705,112.5730666,26.8946958,112.5730665,26.8946542,112.5730664,26.89461166,112.5730661,26.89456982,112.5730655,26.8945277,112.5730648,26.89448509,112.5730641,26.89444724,112.5730633,26.89440734,112.5730627,26.8943688,112.5730623,26.89432806,112.573062,26.89428862,112.5730619,26.89424679,112.5730619,26.89420622,112.5730619,26.89416428,112.5730617,26.894122,112.5730614,26.89407948,112.5730611,26.89403586,112.5730608,26.89399505,112.5730604,26.89395071,112.57306,26.89390857,112.5730596,26.89386637,112.5730592,26.89382411,112.5730588,26.89378642,112.5730584,26.89374473,112.5730579,26.89370185,112.5730574,26.89365882,112.5730569,26.89361566,112.5730563,26.89357237,112.5730557,26.89352906,112.5730552,26.89348503,112.5730547,26.89344298,112.5730542,26.89339899,112.5730537,26.89335682,112.5730532,26.89331263,112.5730527,26.89326926,112.5730523,26.8932269,112.5730518,26.89318296,112.5730513,26.89314193,112.5730508,26.89309986,112.5730501,26.89305483,112.5730493,26.89301059,112.5730485,26.89296809,112.5730477,26.89292827,112.5730469,26.89288538,112.5730462,26.89284648,112.5730456,26.89280284,112.5730449,26.89275812,112.5730442,26.89271515,112.5730434,26.89267005,112.5730426,26.89262685,112.5730418,26.89258263,112.5730412,26.89253851,112.5730411,26.89249867,112.5730408,26.89245598,112.5730404,26.89241124,112.57304,26.89236733,112.5730397,26.89232821,112.5730395,26.8922852,112.5730393,26.89224026,112.573039,26.89219719,112.5730386,26.89215689,112.5730382,26.89211347,112.5730377,26.89206894,112.5730371,26.89202329,112.5730364,26.89198359,112.5730357,26.89194406,112.5730348,26.89190081,112.573034,26.89186042,112.5730331,26.89181692,112.5730323,26.89177132,112.5730315,26.89172754,112.5730306,26.89168257,112.5730298,26.8916364,112.5730292,26.8915963,112.5730286,26.89155153,112.573028,26.89151226,112.5730275,26.89146971,112.5730269,26.89142553,112.5730263,26.89138216,112.5730257,26.89134344,112.5730252,26.8913007,112.5730247,26.89125681,112.5730242,26.89121279,112.5730237,26.89116805,112.5730232,26.89112542,112.5730228,26.89108565,112.5730222,26.89104309,112.5730216,26.891,112.573021,26.89095657,112.5730204,26.89091571,112.5730197,26.89087365,112.573019,26.89083393,112.5730182,26.89079307,112.5730175,26.89075464,112.5730167,26.89071179,112.5730158,26.890669,112.573015,26.89062799,112.5730143,26.8905879,112.5730137,26.89054827,112.5730132,26.89050954,112.5730129,26.89047035,112.5730126,26.89043179,112.5730124,26.89039326,112.5730124,26.89035626,112.5730126,26.8903165,112.5730128,26.89027831,112.5730131,26.89023978,112.5730135,26.89020133,112.5730142,26.89016195,112.573015,26.8901229,112.573016,26.89008347,112.5730169,26.8900436,112.5730175,26.89000409,112.5730179,26.88996363,112.573018,26.88992305,112.573018,26.88988251,112.5730178,26.88984153,112.5730175,26.88980195,112.5730172,26.889763,112.5730168,26.88972426,112.5730164,26.88968621,112.5730159,26.8896472,112.5730156,26.8896077,112.5730153,26.88956763,112.5730149,26.8895263,112.573015,26.88948602,112.5730154,26.88944825,112.5730163,26.88941028,112.5730175,26.88937211,112.5730192,26.88933369,112.5730211,26.88929501,112.5730231,26.88925521,112.5730251,26.88921664,112.5730272,26.88917695,112.5730293,26.88913726,112.5730312,26.88909752,112.5730329,26.88905761,112.5730342,26.88901694,112.5730351,26.88897695,112.5730358,26.88893662,112.5730363,26.88889578,112.5730366,26.88885506,112.5730368,26.88881282,112.5730368,26.88877344,112.5730367,26.88873567,112.5730363,26.88869385,112.5730358,26.88865167,112.5730355,26.88861355,112.5730352,26.88857604,112.5730353,26.88853783,112.573036,26.88850285,112.5730381,26.8884678,112.5730414,26.88843287,112.5730459,26.88839641,112.5730501,26.88836049,112.5730538,26.88832288,112.5730569,26.8882834,112.5730593,26.88824441,112.5730612,26.88820407,112.5730624,26.88816653,112.5730632,26.88812675,112.5730636,26.88808468,112.5730638,26.88804298,112.5730638,26.88800383,112.5730637,26.8879638,112.5730636,26.88792198,112.5730633,26.88788025,112.573063,26.88783868,112.5730628,26.88779446,112.5730627,26.88775538,112.5730626,26.88771081,112.5730625,26.88767077,112.5730624,26.88763149,112.5730622,26.8875858,112.5730618,26.88754374,112.5730614,26.88750332,112.5730609,26.88746145,112.5730603,26.88741917,112.5730596,26.8873754,112.573059,26.88733334,112.5730582,26.88728878,112.5730574,26.88724606,112.5730566,26.88720198,112.5730558,26.88715766,112.573055,26.88711198,112.5730542,26.88706716,112.5730535,26.88702326,112.5730528,26.88697691,112.5730521,26.88693149,112.5730515,26.88688703,112.5730509,26.88684114,112.5730503,26.88679492,112.5730497,26.886753,112.5730491,26.88670608,112.5730486,26.88666481,112.573048,26.88661866,112.5730474,26.88657015,112.5730468,26.88652287,112.5730463,26.8864815,112.5730457,26.88643422,112.5730451,26.8863882,112.5730444,26.88634004,112.5730438,26.88629326,112.5730432,26.88624779,112.5730427,26.88620128,112.5730422,26.88615365,112.5730418,26.886113,112.5730414,26.88607235,112.5730409,26.88603171,112.5730404,26.88599109,112.5730399,26.88594474,112.5730393,26.88590428,112.5730388,26.88585928,112.5730381,26.88581315,112.5730375,26.88576584,112.573037,26.8857254,112.5730363,26.88568022,112.5730356,26.88563363,112.5730349,26.88558562,112.5730342,26.88554445,112.5730335,26.88550318,112.5730328,26.88546189,112.5730319,26.88541473,112.5730311,26.88537343,112.5730303,26.88533212,112.5730294,26.88529089,112.5730285,26.88524512,112.5730277,26.88519833,112.5730271,26.88515065,112.5730267,26.88511019,112.5730263,26.88506425,112.573026,26.88502088,112.5730257,26.88497335,112.5730256,26.88492856,112.5730256,26.88488519,112.5730258,26.88484095,112.5730259,26.88479582,112.5730259,26.88475206,112.5730256,26.88470963,112.5730251,26.88466503,112.5730246,26.88462156,112.5730239,26.88457918,112.5730232,26.88453565,112.5730224,26.88449103,112.5730216,26.8844475,112.5730207,26.88440509,112.5730197,26.88436157,112.5730186,26.88431671,112.5730174,26.88427269,112.5730161,26.8842295,112.5730145,26.8841838,112.5730127,26.88413884,112.5730109,26.88409464,112.573009,26.884049,112.573007,26.88400193,112.5730051,26.8839615,112.5730028,26.883915,112.5730006,26.88387428,112.5729984,26.88383342,112.5729959,26.88379245,112.5729932,26.8837514,112.5729903,26.88371044,112.5729871,26.88366959,112.5729834,26.88362416,112.5729793,26.88357766,112.5729748,26.88353023,112.5729708,26.8834899,112.5729666,26.88344952,112.5729623,26.88340907,112.5729577,26.88336862,112.5729529,26.88332817,112.5729479,26.8832878,112.5729426,26.88324749,112.572937,26.88320728,112.5729312,26.88316723,112.5729244,26.88312256,112.5729171,26.8830766,112.5729094,26.88303051,112.5729012,26.88298303,112.572894,26.88294231,112.5728871,26.88290217,112.5728796,26.8828595,112.572872,26.88281792,112.5728644,26.88277586,112.5728569,26.88273482,112.5728484,26.88269156,112.5728399,26.88264966,112.5728312,26.88260788,112.572822,26.88256629,112.5728127,26.88252487,112.572803,26.88248338,112.5727931,26.88244204,112.5727834,26.88240206,112.5727731,26.88236009,112.572763,26.88231966,112.5727512,26.88227392,112.5727396,26.88222985,112.5727291,26.88219079,112.5727169,26.88214677,112.5727042,26.88210204,112.572692,26.8820596,112.5726793,26.88201625,112.5726665,26.88197324,112.5726533,26.88192965,112.5726405,26.88188865,112.5726268,26.88184561,112.5726132,26.8818036,112.5725997,26.88176259,112.5725855,26.88172043,112.5725707,26.8816771,112.5725565,26.8816358,112.5725415,26.88159334,112.5725264,26.88155081,112.572511,26.88150823,112.5724954,26.8814657,112.5724795,26.88142339,112.5724634,26.8813813,112.5724465,26.8813382,112.57243,26.88129717,112.5724129,26.88125502,112.5723955,26.88121281,112.5723774,26.88116959,112.5723601,26.8811287,112.5723417,26.88108614,112.5723237,26.88104504,112.5723062,26.88100556,112.5722884,26.88096593,112.5722703,26.88092599,112.5722526,26.88088738,112.5722353,26.88085008,112.5722176,26.88081218,112.5721995,26.8807741,112.572182,26.88073772,112.5721629,26.88069858,112.5721449,26.88066292,112.5721255,26.88062533,112.5721058,26.88058778,112.5720862,26.88055066,112.5720664,26.88051342,112.5720459,26.88047514,112.5720259,26.88043827,112.5720047,26.88039948,112.5719839,26.88036225,112.5719622,26.88032409,112.5719404,26.88028602,112.5719179,26.88024716,112.5718961,26.88020984,112.5718754,26.88017492,112.5718528,26.88013739,112.5718313,26.8801023,112.5718101,26.88006792,112.571789,26.88003419,112.5717638,26.87999408,112.5717419,26.87995981,112.5717189,26.87992442,112.5716948,26.8798879,112.5716709,26.87985208,112.5716472,26.87981711,112.571622,26.87978042,112.571597,26.87974467,112.5715723,26.8797097,112.5715467,26.87967372,112.5715206,26.8796376,112.5714936,26.87960038,112.5714675,26.87956482,112.5714407,26.87952843,112.5714134,26.87949148,112.5713876,26.87945693,112.5713616,26.87942227,112.5713353,26.87938759,112.5713099,26.87935455,112.5712856,26.87932296,112.5712568,26.8792859,112.5712316,26.87925359,112.5712068,26.87922198,112.571181,26.87918931,112.5711542,26.87915546,112.5711282,26.87912288,112.571101,26.87908911,112.5710725,26.87905404,112.5710447,26.8790202,112.5710158,26.87898511,112.5709866,26.87894977,112.5709565,26.87891343,112.5709276,26.87887888,112.5708978,26.87884366,112.5708673,26.87880792,112.5708378,26.87877355,112.5708093,26.87874059,112.5707796,26.87870656,112.570751,26.87867398,112.570723,26.87864244,112.5706941,26.87861029,112.5706641,26.87857742,112.5706344,26.87854533,112.5706052,26.878514,112.5705752,26.87848191,112.570545,26.87844992,112.5705142,26.87841731,112.5704852,26.87838658,112.5704558,26.87835547,112.5704261,26.87832404,112.5703985,26.87829459,112.5703672,26.87826116,112.5703368,26.87822827,112.5703064,26.87819522,112.5702777,26.87816376,112.5702477,26.87813063,112.570219,26.87809865,112.5701894,26.87806568,112.5701592,26.87803168,112.5701329,26.87800179,112.5701039,26.87796856,112.5700766,26.87793705,112.5700499,26.87790587,112.5700237,26.87787493,112.569996,26.87784169,112.5699686,26.8778085,112.5699416,26.87777537,112.5699135,26.87774068,112.5698846,26.8777044,112.5698576,26.87767022,112.5698286,26.87763295,112.5698002,26.87759619,112.5697744,26.87756276,112.5697462,26.87752631,112.5697199,26.87749247,112.5696942,26.87745934,112.5696691,26.87742689,112.5696431,26.87739326,112.5696164,26.87735855,112.5695906,26.87732475,112.569565,26.87729089,112.5695402,26.87725792,112.5695106,26.87721804,112.5694856,26.87718389,112.5694607,26.87714969,112.569436,26.87711554,112.5694115,26.87708153,112.5693874,26.87704768,112.5693611,26.8770101,112.5693345,26.87697143,112.5693076,26.87693169,112.5692849,26.87689765,112.5692599,26.87685958,112.5692347,26.87682032,112.5692129,26.87678588,112.5691882,26.8767465,112.5691633,26.87670629,112.5691402,26.87666829,112.5691169,26.87662984,112.569094,26.87659195,112.5690706,26.8765532,112.5690484,26.87651636,112.5690252,26.87647757,112.5690028,26.8764397,112.5689811,26.87640275,112.5689591,26.87636474,112.5689367,26.87632568,112.568915,26.8762874,112.568894,26.8762499,112.5688728,26.87621139,112.5688515,26.87617194,112.5688316,26.87613461,112.5688116,26.87609641,112.5687913,26.87605717,112.5687715,26.87601885,112.5687522,26.87598143,112.5687323,26.87594291,112.5687123,26.87590424,112.5686917,26.87586442,112.568672,26.87582637,112.5686514,26.87578619,112.5686319,26.8757478,112.568612,26.87570831,112.5685921,26.87566873,112.568572,26.87562808,112.5685524,26.87558833,112.5685336,26.87554945,112.5685142,26.87550855,112.5684958,26.8754687,112.5684783,26.87542992,112.5684608,26.87539031,112.5684435,26.87535077,112.5684264,26.87531125,112.5684095,26.87527174,112.5683928,26.87523232,112.5683759,26.87519204,112.5683599,26.87515375,112.5683436,26.87511442,112.5683268,26.87507399,112.568311,26.87503544,112.5682949,26.87499591,112.568279,26.87495635,112.5682629,26.8749157,112.5682473,26.87487598,112.5682324,26.87483724,112.5682169,26.87479641,112.5682019,26.87475651,112.5681875,26.87471759,112.568173,26.87467768,112.5681584,26.87463682,112.5681444,26.87459696,112.5681311,26.87455821,112.5681179,26.87451876,112.5681048,26.87447884,112.5680927,26.8744415,112.5680788,26.87439836,112.5680659,26.874358,112.5680528,26.87431705,112.5680408,26.87427962,112.5680289,26.87424188,112.568016,26.87420139,112.5680032,26.87416169,112.56799,26.87412103,112.5679778,26.8740834,112.5679648,26.87404224,112.5679536,26.87400567,112.5679423,26.87396694,112.5679319,26.87392933,112.5679214,26.87389029,112.5679109,26.87384999,112.567901,26.87381101,112.5678909,26.87376984,112.5678812,26.87373004,112.567871,26.87368804,112.5678611,26.87364741,112.5678508,26.87360523,112.5678402,26.87356236,112.5678304,26.87352268,112.5678211,26.87348436,112.5678103,26.87343955,112.5678007,26.87339815,112.5677916,26.87335822,112.5677825,26.87331672,112.5677733,26.87327368,112.5677649,26.87323236,112.5677563,26.87318953,112.5677481,26.87314629,112.5677399,26.87310163,112.5677323,26.87305885,112.5677249,26.87301482,112.5677177,26.87296977,112.5677112,26.8729271,112.5677047,26.87288338,112.5676982,26.87283962,112.5676916,26.87279458,112.5676853,26.87275153,112.5676788,26.87270728,112.5676724,26.87266312,112.5676659,26.87261775,112.5676599,26.87257434,112.5676537,26.87252853,112.5676479,26.87248363,112.5676424,26.87243961,112.5676371,26.87239419,112.5676319,26.87234731,112.5676275,26.87230706,112.5676225,26.87226078,112.5676182,26.87222008,112.5676139,26.87217914,112.5676096,26.87213798,112.5676051,26.87209184,112.5676007,26.87204309,112.5675971,26.87200134,112.5675937,26.87196062,112.5675905,26.8719185,112.5675875,26.87187621,112.5675849,26.87183377,112.5675826,26.87179121,112.5675808,26.87174733,112.5675795,26.87170582,112.5675783,26.87166177,112.5675774,26.87162009,112.5675765,26.87157093,112.5675757,26.87152664,112.5675747,26.87148478,112.5675736,26.87144041,112.5675724,26.87139718,112.5675711,26.87135386,112.5675699,26.87131048,112.5675688,26.87126725,112.5675673,26.87122412,112.5675654,26.8711811,112.5675634,26.87113938,112.5675611,26.87109529,112.567559,26.87105253,112.5675571,26.87100987,112.5675554,26.87096736,112.5675537,26.87092512,112.567552,26.87087727,112.5675504,26.87083084,112.5675488,26.87078346,112.5675474,26.87073649,112.5675462,26.87069473,112.5675448,26.87064901,112.5675435,26.87060517,112.5675421,26.87056099,112.5675407,26.87051645,112.5675395,26.8704748,112.5675383,26.87043287,112.567537,26.87039053,112.5675358,26.87034983,112.5675346,26.87031065,112.5675331,26.87026466,112.5675317,26.87022081,112.5675299,26.87017502,112.5675282,26.87013109,112.5675264,26.87009001,112.5675247,26.87004982,112.5675232,26.87001052,112.5675214,26.8699641,112.5675199,26.86992484,112.5675183,26.86988464,112.5675165,26.86984338,112.5675144,26.86979907,112.5675123,26.86975781,112.5675103,26.8697176,112.5675084,26.86967842,112.5675064,26.86963225,112.5675048,26.8695931,112.567503,26.86954786,112.5675014,26.86950648,112.5675001,26.86946691,112.5674988,26.86942606,112.5674976,26.86938392,112.5674965,26.86934351,112.5674954,26.86930177,112.5674943,26.86925977,112.5674932,26.86921749,112.5674921,26.86917495,112.567491,26.86913224,112.5674898,26.86908935,112.5674886,26.86904525,112.5674874,26.86900313,112.5674863,26.86895978,112.5674852,26.8689163,112.567484,26.86887162,112.5674827,26.86882903,112.5674813,26.86878515,112.5674798,26.86873992,112.5674783,26.86869666,112.5674766,26.86865197,112.5674749,26.86860584,112.5674731,26.8685605,112.5674712,26.868516,112.5674694,26.86847009,112.5674675,26.86842391,112.5674659,26.86838218,112.5674642,26.86834152,112.5674626,26.86830078,112.5674609,26.86825999,112.5674592,26.86821914,112.5674574,26.86817355,112.5674555,26.86812672,112.5674536,26.86807979,112.5674518,26.86803165,112.5674501,26.86799053,112.5674485,26.86794938,112.5674468,26.86790817,112.567445,26.86786215,112.5674431,26.86781487,112.5674412,26.86776628,112.5674395,26.86771875,112.5674379,26.86767233,112.5674362,26.86762341,112.5674346,26.86757562,112.5674331,26.86752895,112.5674315,26.86748102,112.5674298,26.86743174,112.5674284,26.8673908,112.567427,26.86734857,112.5674256,26.86730509,112.5674242,26.86726398,112.5674228,26.8672216,112.5674214,26.86717915,112.56742,26.86713666,112.5674185,26.86709288,112.567417,26.86705026,112.5674156,26.86700761,112.5674142,26.86696616,112.5674127,26.86692347,112.5674112,26.86687958,112.5674097,26.86683694,112.5674082,26.86679552,112.5674066,26.86675284,112.5674051,26.86671013,112.5674036,26.86666735,112.567402,26.8666245,112.5674003,26.86658036,112.5673988,26.86653862,112.5673972,26.86649561,112.5673955,26.86645253,112.5673936,26.86640201,112.567392,26.86635884,112.56739,26.86630946,112.5673881,26.86626128,112.5673862,26.86621183,112.5673844,26.86616862,112.5673828,26.86612551,112.5673811,26.86608121,112.5673795,26.86603937,112.5673779,26.86599629,112.5673764,26.8659532,112.567375,26.86591009,112.5673736,26.86586696,112.567372,26.86582258,112.5673705,26.86578066,112.5673689,26.86573754,112.567367,26.86569438,112.5673651,26.86565124,112.5673632,26.86560809,112.5673614,26.86556491,112.5673597,26.86552172,112.567358,26.8654711,112.5673566,26.8654279,112.5673553,26.86538593,112.567354,26.86534148,112.5673527,26.86529826,112.5673513,26.86525503,112.5673501,26.86521301,112.5673488,26.86516974,112.5673475,26.86512644,112.5673463,26.86508189,112.5673452,26.8650398,112.567344,26.86499649,112.5673427,26.86495199,112.5673416,26.86490877,112.5673405,26.86486555,112.5673396,26.86482358,112.5673386,26.86478042,112.5673378,26.8647373,112.5673369,26.86469429,112.5673361,26.86465025,112.5673354,26.86460882,112.5673348,26.86456629,112.5673343,26.86452384,112.5673338,26.86448017,112.5673334,26.86443894,112.5673331,26.86439528,112.5673328,26.86435283,112.5673325,26.86431159,112.5673322,26.86426913,112.5673319,26.86422543,112.5673317,26.86418416,112.5673316,26.86414044,112.5673315,26.86409911,112.5673315,26.86405653,112.5673316,26.86401274,112.5673317,26.86397137,112.5673318,26.86392876,112.567332,26.86388614,112.5673321,26.86384351,112.5673322,26.86380086,112.5673322,26.86375816,112.5673321,26.86371536,112.5673321,26.86367248,112.5673321,26.86362955,112.5673326,26.86357924,112.5673332,26.86353624,112.5673342,26.86349317,112.5673352,26.86345126,112.5673365,26.86340684,112.5673378,26.86336361,112.5673391,26.86332033,112.5673403,26.86327822,112.5673412,26.86323356,112.5673419,26.86319004,112.5673425,26.86314639,112.5673432,26.86310264,112.5673439,26.86306,112.5673446,26.86301475,112.5673455,26.86297064,112.5673465,26.86292645,112.5673477,26.86288212,112.567349,26.86283769,112.5673504,26.86279316,112.5673518,26.86274854,112.5673534,26.8627051,112.567355,26.86265906,112.5673568,26.86261425,112.5673586,26.86257067,112.5673607,26.86252576,112.5673629,26.8624808,112.5673651,26.8624345,112.5673673,26.86239072,112.5673697,26.86234436,112.5673719,26.86230063,112.5673743,26.86225443,112.5673767,26.86220961,112.5673791,26.8621662,112.5673816,26.8621217,112.5673844,26.86207613,112.5673871,26.86203196,112.5673898,26.86198919,112.5673927,26.86194408,112.5673957,26.86190044,112.5673986,26.86185828,112.5674016,26.86181519,112.5674047,26.86177236,112.5674078,26.86172852,112.5674109,26.86168607,112.5674139,26.86164492,112.5674171,26.86160136,112.5674202,26.86155902,112.5674234,26.86151665,112.5674267,26.86147546,112.5674301,26.86143301,112.5674335,26.86139048,112.567437,26.86134783,112.5674405,26.861305,112.5674442,26.86126202,112.5674481,26.86121756,112.5674518,26.86117533,112.5674556,26.86113159,112.5674595,26.86108761,112.5674634,26.86104335,112.5674673,26.86099883,112.5674714,26.86095276,112.5674752,26.860909,112.5674793,26.86086241,112.5674832,26.8608182,112.5674871,26.86077258,112.5674911,26.86072692,112.5674952,26.86068139,112.5674993,26.86063475,112.5675033,26.86059091,112.5675075,26.86054592,112.5675119,26.86050102,112.5675163,26.86045621,112.5675209,26.8604115,112.5675255,26.86036692,112.5675301,26.86032249,112.5675347,26.86027832,112.5675395,26.86023447,112.5675443,26.86019094,112.5675499,26.86014143,112.5675551,26.86009704,112.5675602,26.86005525,112.5675657,26.86001113,112.5675712,26.85996839,112.5675769,26.85992583,112.5675827,26.85988345,112.5675885,26.85984244,112.5675945,26.85979918,112.5676003,26.8597573,112.5676061,26.85971567,112.5676127,26.85966849,112.5676184,26.85962746,112.5676248,26.85958196,112.5676315,26.8595343,112.567638,26.85948797,112.5676438,26.85944753,112.5676496,26.85940715,112.5676555,26.85936687,112.567662,26.85932217,112.5676688,26.85927647,112.5676758,26.85922972,112.5676827,26.85918415,112.5676895,26.85913975,112.5676964,26.85909433,112.5677036,26.85904794,112.5677103,26.859004,112.5677173,26.8589591,112.5677244,26.85891326,112.5677315,26.85886871,112.5677384,26.85882537,112.5677455,26.85878094,112.5677529,26.85873538,112.5677601,26.85869095,112.5677673,26.85864762,112.567775,26.85860196,112.5677826,26.85855723,112.5677901,26.85851344,112.5677978,26.85846829,112.5678058,26.85842178,112.5678136,26.85837618,112.5678205,26.8583361,112.5678275,26.85829587,112.5678355,26.85825086,112.5678437,26.85820449,112.5678512,26.85816261,112.5678596,26.85811587,112.567868,26.85807012,112.5678758,26.85802773,112.5678835,26.85798637,112.5678914,26.8579449,112.5678993,26.8579033,112.5679074,26.85786158,112.5679155,26.85781974,112.5679237,26.85777775,112.5679318,26.85773564,112.56794,26.85769342,112.5679492,26.85764624,112.5679588,26.8575977,112.5679674,26.85755387,112.5679756,26.85751238,112.5679844,26.85746833,112.5679928,26.85742662,112.5680018,26.85738235,112.5680105,26.85734049,112.5680197,26.85729609,112.5680285,26.8572541,112.5680377,26.85721086,112.5680468,26.85716763,112.5680559,26.85712438,112.5680653,26.85707988,112.5680744,26.85703659,112.5680834,26.85699454,112.5680927,26.85695129,112.5681021,26.85690798,112.5681117,26.85686472,112.5681214,26.85682142,112.5681316,26.85677687,112.5681412,26.85673477,112.5681512,26.85669142,112.5681612,26.85664807,112.5681713,26.85660471,112.5681815,26.8565613,112.5681918,26.85651784,112.5682022,26.85647436,112.5682125,26.85643085,112.568223,26.85638731,112.5682334,26.85634374,112.5682438,26.85630014,112.5682542,26.85625653,112.5682646,26.85621292,112.568275,26.85616934,112.5682856,26.85612576,112.5682961,26.85608222,112.5683068,26.85603871,112.5683175,26.85599523,112.5683283,26.85595174,112.5683391,26.85590827,112.56835,26.85586481,112.5683608,26.85582135,112.5683716,26.8557779,112.5683824,26.85573445,112.5683932,26.85569109,112.5684039,26.85564784,112.5684146,26.85560469,112.5684253,26.85556164,112.5684359,26.85551869,112.5684465,26.85547585,112.5684571,26.8554331,112.5684692,26.85538435,112.5684798,26.85534179,112.5684907,26.855298,112.568501,26.85525659,112.5685119,26.85521269,112.5685225,26.85516999,112.5685328,26.85512851,112.5685435,26.85508584,112.5685545,26.85504202,112.5685652,26.85499958,112.568576,26.85495741,112.5685865,26.85491681,112.5685972,26.85487547,112.5686081,26.85483341,112.56862,26.85478737,112.5686301,26.85474766,112.5686411,26.85470406,112.5686521,26.85466006,112.568663,26.85461675,112.5686741,26.85457261,112.5686845,26.85453065,112.5686953,26.85448763,112.5687062,26.85444347,112.5687171,26.85440031,112.5687278,26.85435814,112.568739,26.85431482,112.5687505,26.85427036,112.5687615,26.854228,112.5687728,26.85418444,112.5687842,26.85414074,112.568796,26.85409578,112.5688072,26.85405281,112.5688186,26.85400854,112.5688303,26.85396292,112.5688403,26.8539238,112.5688516,26.85387999,112.5688634,26.85383485,112.5688757,26.85378837,112.5688879,26.85374282,112.5688998,26.85369813,112.5689122,26.85365202,112.5689231,26.85361148,112.568934,26.85357073,112.568945,26.85352976,112.5689563,26.85348742,112.5689669,26.85344729,112.5689777,26.85340595,112.5689884,26.85336456,112.568999,26.85332314,112.5690095,26.85328177,112.5690201,26.85323937,112.5690301,26.85319962,112.5690419,26.85315203,112.5690519,26.85311185,112.5690618,26.85307214,112.5690725,26.85302843,112.5690834,26.85298416,112.5690945,26.85293939,112.5691052,26.85289631,112.5691153,26.85285525,112.5691254,26.85281427,112.5691363,26.85276925,112.5691467,26.85272479,112.5691558,26.85268448,112.5691642,26.85264604,112.5691739,26.85260068,112.5691823,26.85256148,112.5691914,26.85251902,112.5692006,26.85247698,112.5692099,26.85243617,112.5692195,26.85239528,112.5692291,26.85235591,112.5692383,26.85231832,112.5692483,26.85227828,112.5692577,26.85224057,112.5692673,26.85220256,112.5692765,26.85216641,112.5692852,26.85213217,112.5692934,26.85209921,112.5693012,26.85206782,112.5693088,26.8520366,112.5693165,26.85200596,112.5693244,26.85197473,112.5693329,26.85194174,112.5693415,26.85190886,112.5693505,26.85187391,112.5693596,26.85183913,112.5693689,26.8518038,112.5693786,26.85176767,112.5693886,26.85173053,112.5693987,26.85169321,112.5694093,26.8516548,112.5694193,26.85161924,112.5694299,26.85158166,112.5694409,26.85154281,112.5694525,26.85150268,112.5694646,26.85146038,112.5694754,26.85142303,112.5694865,26.85138403,112.5694981,26.85134331,112.5695094,26.8513035,112.5695209,26.85126192,112.5695315,26.85122334,112.5695429,26.85118118,112.5695535,26.85114123,112.5695636,26.8511028,112.5695755,26.85105703,112.569586,26.85101676,112.5695962,26.85097701,112.5696067,26.85093573,112.5696177,26.85089286,112.5696282,26.85085165,112.5696391,26.85080916,112.5696501,26.85076663,112.5696614,26.8507231,112.5696721,26.85068191,112.5696831,26.85064005,112.5696943,26.85059766,112.5697049,26.8505579,112.5697157,26.8505174,112.5697268,26.8504759,112.5697376,26.85043546,112.5697479,26.85039631,112.5697583,26.85035632,112.569769,26.85031532,112.5697793,26.85027546,112.5697893,26.85023657,112.5697997,26.85019564,112.5698107,26.85015163,112.5698219,26.85010653,112.5698321,26.8500653,112.5698417,26.85002598,112.5698515,26.84998557,112.5698615,26.84994409,112.5698711,26.84990454,112.5698812,26.84986385,112.5698918,26.84982193,112.5699024,26.84978088,112.5699128,26.84974064,112.5699238,26.84969806,112.5699346,26.84965622,112.569945,26.84961514,112.5699557,26.84957283,112.5699663,26.84953049,112.5699772,26.84948722,112.5699876,26.84944638,112.5699983,26.84940488,112.570009,26.84936345,112.57002,26.84932117,112.5700303,26.84928134,112.5700409,26.84924079,112.5700518,26.8491992,112.5700621,26.84915954,112.5700727,26.8491187,112.5700833,26.8490776,112.5700944,26.84903516,112.5701051,26.8489945,112.5701161,26.84895247,112.5701271,26.84891002,112.5701384,26.84886612,112.5701492,26.84882402,112.5701606,26.84877956,112.5701718,26.84873609,112.5701827,26.84869375,112.5701938,26.84865055,112.5702048,26.84860776,112.5702158,26.84856529,112.5702268,26.8485228,112.5702382,26.84847919,112.5702493,26.84843653,112.5702603,26.84839485,112.5702715,26.848352,112.5702828,26.84830902,112.5702945,26.84826488,112.5703052,26.8482239,112.5703166,26.84817971,112.5703278,26.84813556,112.5703382,26.84809355,112.5703487,26.84805035,112.5703592,26.84800699,112.57037,26.8479623,112.5703803,26.8479196,112.5703909,26.84787565,112.5704018,26.84783026,112.570412,26.84778789,112.5704233,26.84774191,112.5704349,26.84769563,112.570446,26.84765133,112.5704563,26.84761025,112.5704663,26.8475702,112.5704764,26.84753009,112.5704865,26.84748987,112.5704967,26.8474496,112.5705069,26.84740932,112.5705171,26.84736909,112.5705271,26.84732902,112.5705369,26.84728922,112.5705466,26.84724972,112.5705562,26.84721025,112.5705668,26.84716626,112.5705776,26.84712107,112.5705886,26.84707583,112.5705999,26.84702942,112.5706107,26.84698518,112.5706216,26.84693969,112.5706323,26.84689405,112.5706416,26.84685284,112.5706517,26.84680806,112.5706608,26.84676669,112.5706698,26.84672647,112.5706787,26.84668626,112.5706888,26.84664152,112.5706994,26.84659467,112.5707094,26.84655054,112.5707195,26.84650579,112.5707294,26.84646167,112.5707392,26.8464178,112.5707492,26.84637281,112.5707587,26.84633008,112.5707686,26.84628626,112.5707786,26.8462413,112.5707883,26.84619855,112.5707984,26.84615469,112.5708087,26.84610965,112.5708187,26.84606559,112.5708286,26.84602245,112.5708386,26.84597801,112.5708489,26.84593231,112.5708586,26.84588861,112.5708685,26.84584351,112.5708785,26.84579714,112.5708871,26.84575753,112.5708955,26.84571792,112.5709038,26.84567829,112.5709132,26.84563323,112.5709222,26.84558947,112.5709313,26.84554459,112.5709406,26.84549855,112.5709496,26.84545356,112.5709584,26.84540959,112.5709675,26.84536402,112.5709769,26.84531752,112.5709851,26.84527773,112.5709933,26.84523775,112.5710016,26.84519755,112.5710098,26.84515713,112.5710181,26.84511659,112.5710263,26.84507603,112.5710345,26.84503528,112.5710427,26.84499453,112.5710509,26.84495367,112.5710591,26.84491286,112.5710672,26.84487214,112.5710754,26.84483149,112.5710846,26.84478523,112.5710925,26.84474496,112.5711013,26.8447002,112.5711105,26.84465306,112.5711191,26.84460815,112.571127,26.84456655,112.5711347,26.84452593,112.5711424,26.84448508,112.57115,26.84444403,112.5711577,26.8444028,112.571165,26.8443626,112.5711726,26.84432108,112.5711805,26.84427818,112.571188,26.8442375,112.5711962,26.84419424,112.5712043,26.84415208,112.5712123,26.8441098,112.5712203,26.84406849,112.5712286,26.84402576,112.5712372,26.84398154,112.5712456,26.84393827,112.571254,26.84389472,112.5712622,26.84385088,112.5712704,26.84380676,112.5712782,26.84376361,112.5712865,26.84371764,112.5712944,26.84367271,112.5713022,26.84362883,112.5713104,26.84358216,112.5713184,26.84353655,112.5713263,26.84349208,112.5713344,26.84344615,112.5713428,26.8433988,112.571351,26.84335266,112.5713591,26.84330645,112.5713672,26.84326013,112.5713751,26.84321383,112.5713831,26.84316752,112.571391,26.84312124,112.571399,26.84307506,112.5714069,26.84302917,112.5714143,26.8429849,112.5714221,26.84293842,112.5714296,26.84289371,112.5714368,26.84285079,112.5714443,26.84280575,112.5714514,26.84276205,112.5714584,26.8427197,112.5714654,26.8426762,112.5714726,26.84263154,112.5714795,26.84258815,112.5714863,26.84254605,112.5714934,26.84250158,112.5715002,26.84245846,112.5715068,26.84241668,112.5715137,26.8423725,112.5715205,26.84232956,112.5715271,26.8422866,112.5715338,26.84224355,112.5715404,26.84220166,112.5715471,26.84215849,112.5715539,26.84211527,112.5715609,26.84207078,112.5715677,26.84202744,112.5715745,26.84198409,112.5715811,26.84194197,112.5715878,26.84189863,112.5715945,26.84185531,112.5716012,26.84181201,112.5716083,26.84176755,112.5716152,26.84172559,112.5716224,26.84168113,112.5716292,26.84163906,112.5716361,26.84159567,112.5716428,26.84155208,112.5716495,26.84150697,112.5716558,26.8414629,112.5716621,26.84141857,112.5716681,26.84137527,112.5716743,26.84133048,112.5716804,26.84128548,112.5716863,26.84124022,112.5716922,26.8411947,112.5716982,26.84114767,112.5717038,26.84110308,112.5717098,26.84105704,112.5717158,26.84101086,112.5717222,26.84096328,112.5717283,26.84091824,112.5717347,26.84087052,112.5717408,26.84082539,112.5717472,26.84077764,112.5717533,26.84073261,112.5717595,26.84068633,112.5717657,26.84064021,112.5717717,26.8405942,112.5717776,26.84054829,112.5717835,26.84050127,112.571789,26.84045706,112.5717946,26.84041174,112.5718002,26.84036654,112.5718058,26.84032018,112.5718112,26.84027644,112.5718166,26.84023153,112.5718221,26.84018682,112.5718275,26.84014242,112.5718329,26.84009818,112.5718382,26.84005414,112.5718435,26.84001029,112.5718487,26.8399667,112.5718545,26.83991705,112.5718596,26.8398725,112.5718645,26.83982929,112.5718693,26.83978622,112.571874,26.83974449,112.5718789,26.83970042,112.5718836,26.83965766,112.5718883,26.83961497,112.5718927,26.83957366,112.5718974,26.83953004,112.5719019,26.8394877,112.5719061,26.83944662,112.5719104,26.83940439,112.5719148,26.83936105,112.5719191,26.83931893,112.5719233,26.83927806,112.5719275,26.83923605,112.5719317,26.83919408,112.5719358,26.83915211,112.57194,26.83910895,112.571944,26.83906821,112.5719481,26.83902626,112.5719523,26.8389844,112.5719566,26.83894137,112.571961,26.83890078,112.5719663,26.83885186,112.5719707,26.83881012,112.571975,26.83876837,112.5719791,26.83872667,112.5719834,26.83868499,112.571988,26.83863857,112.5719926,26.83859103,112.5719972,26.83854363,112.5720014,26.83850125,112.5720058,26.83845578,112.5720098,26.83841426,112.5720141,26.8383695,112.5720184,26.83832369,112.5720227,26.83827689,112.572027,26.83823128,112.5720312,26.83818691,112.5720357,26.83814037,112.57204,26.83809507,112.5720443,26.83805101,112.5720486,26.8380059,112.5720531,26.83795988,112.5720575,26.83791423,112.5720617,26.83787247,112.5720662,26.83782923,112.572071,26.8377853,112.5720758,26.83774361,112.5720807,26.83770091,112.5720857,26.83765715,112.5720904,26.83761439,112.5720949,26.83757271,112.5720996,26.83753004,112.5721046,26.83748653,112.5721096,26.83744437,112.5721145,26.83740363,112.5721197,26.83736224,112.572125,26.83732131,112.5721303,26.83728088,112.5721354,26.83724088,112.5721413,26.83719506,112.5721463,26.83715633,112.5721522,26.83711078,112.572158,26.83706731,112.5721641,26.837023,112.5721705,26.83697868,112.5721765,26.83693825,112.5721825,26.83689968,112.5721886,26.83685976,112.5721949,26.83681839,112.5722009,26.83677757,112.5722068,26.83673729,112.5722129,26.83669555,112.5722192,26.83665242,112.5722255,26.83660994,112.5722316,26.83656812,112.572238,26.83652481,112.5722444,26.83648114,112.5722509,26.83643723,112.5722575,26.83639331,112.5722642,26.83634823,112.5722708,26.83630512,112.5722776,26.83626056,112.5722846,26.83621557,112.5722919,26.83616898,112.5722982,26.83612874,112.5723046,26.83608814,112.5723111,26.83604724,112.5723177,26.83600605,112.5723245,26.83596463,112.5723311,26.83592419,112.5723382,26.83588113,112.5723453,26.83583914,112.5723523,26.83579702,112.5723594,26.83575467,112.5723666,26.83571207,112.572374,26.83566922,112.5723817,26.83562614,112.5723895,26.83558271,112.5723976,26.83553901,112.5724059,26.83549503,112.5724143,26.83545079,112.5724229,26.83540627,112.5724315,26.83536147,112.5724401,26.83531642,112.5724488,26.83527114,112.5724575,26.83522564,112.5724664,26.83517992,112.5724752,26.83513403,112.5724842,26.83508794,112.5724933,26.83504165,112.5725024,26.83499516,112.5725118,26.83494849,112.5725209,26.834903,112.5725308,26.83485461,112.5725403,26.8348087,112.5725506,26.8347599,112.5725606,26.83471224,112.5725708,26.8346645,112.5725806,26.83461812,112.5725911,26.83456913,112.5726011,26.83452165,112.5726109,26.83447571,112.572621,26.83442874,112.572631,26.8343821,112.5726414,26.83433449,112.5726516,26.83428852,112.5726613,26.83424417,112.5726714,26.83419885,112.5726813,26.83415383,112.5726916,26.83410786,112.5727013,26.83406474,112.5727114,26.83402068,112.5727214,26.83397694,112.5727315,26.83393352,112.5727418,26.83388918,112.5727515,26.83384759,112.5727615,26.83380507,112.5727715,26.83376283,112.5727815,26.83371968,112.5727909,26.8336792,112.5728009,26.83363665,112.5728104,26.83359677,112.5728217,26.83354905,112.5728314,26.83350861,112.572841,26.83346845,112.5728507,26.83342848,112.5728616,26.8333838,112.572873,26.83333783,112.5728849,26.83329071,112.5728965,26.83324462,112.5729067,26.83320424,112.572917,26.83316383,112.5729284,26.83311875,112.5729402,26.83307238,112.5729525,26.83302465,112.5729631,26.83298372,112.5729738,26.8329426,112.5729844,26.8329025,112.5729958,26.83285996,112.5730072,26.83281861,112.5730184,26.83277862,112.5730303,26.83273646,112.5730417,26.83269686,112.5730539,26.83265527,112.5730674,26.83260946,112.5730807,26.83256518,112.5730945,26.83251871,112.5731065,26.83247888,112.57312,26.83243315,112.5731319,26.83239295,112.5731433,26.83235378,112.5731555,26.83231219,112.5731674,26.83227166,112.5731794,26.83223112,112.5731914,26.83219068,112.5732032,26.83215049,112.5732161,26.83210599,112.5732293,26.83206025,112.5732425,26.83201454,112.573256,26.83196793,112.5732675,26.83192843,112.5732791,26.83188899,112.5732908,26.83184951,112.5733039,26.83180549,112.5733175,26.8317603,112.5733316,26.8317139,112.5733436,26.83167425,112.5733558,26.83163458,112.5733698,26.8315893,112.5733821,26.83154987,112.5733944,26.83151079,112.5734066,26.83147204,112.5734202,26.83142885,112.5734342,26.83138452,112.5734487,26.83133903,112.5734624,26.83129566,112.5734767,26.83125107,112.5734911,26.83120637,112.5735061,26.83116058,112.573519,26.83112147,112.573532,26.83108228,112.5735451,26.83104302,112.5735599,26.83099919,112.5735752,26.8309542,112.5735908,26.83090917,112.573607,26.83086304,112.573621,26.83082368,112.5736349,26.83078442,112.5736503,26.83074088,112.5736657,26.83069655,112.5736812,26.83065148,112.5736957,26.83060895,112.5737105,26.83056584,112.5737252,26.83052315,112.5737404,26.83047951,112.573755,26.83043811,112.5737699,26.83039589,112.5737851,26.83035311,112.5737998,26.83031175,112.5738143,26.83027152,112.5738295,26.83022924,112.5738443,26.83018799,112.5738588,26.83014777,112.5738736,26.83010652,112.5738883,26.83006519,112.5739035,26.8300227,112.573918,26.82998218,112.5739327,26.82994066,112.5739474,26.82989933,112.573962,26.82985842,112.5739762,26.82981797,112.5739904,26.82977773,112.5740048,26.82973659,112.5740185,26.82969752,112.5740324,26.82965751,112.5740466,26.82961668,112.57406,26.82957815,112.5740736,26.82953912,112.5740889,26.82949478,112.5741018,26.82945758,112.574115,26.82941969,112.5741286,26.82938128,112.5741418,26.82934446,112.5741565,26.82930484,112.5741718,26.82926535,112.5741873,26.82922699,112.5742027,26.82918967,112.5742192,26.82914978,112.5742349,26.82911184,112.5742491,26.82907713,112.5742631,26.82904236,112.5742775,26.82900665,112.5742914,26.82897283,112.5743051,26.82893948,112.5743175,26.82890905,112.5743294,26.82887934,112.5743412,26.82884938,112.5743534,26.82881806,112.5743662,26.82878494,112.5743792,26.82875159,112.5743932,26.82871695,112.5744066,26.82868419,112.574421,26.82864938,112.5744352,26.82861544,112.5744495,26.82858142,112.5744645,26.82854579,112.5744802,26.82850912,112.5744965,26.82847139,112.5745119,26.82843644,112.5745277,26.82840103,112.5745437,26.82836521,112.5745602,26.82832832,112.5745767,26.82829174,112.5745933,26.82825533,112.5746107,26.82821768,112.5746284,26.82817956,112.5746464,26.82814074,112.5746648,26.82810122,112.5746816,26.82806509,112.5746987,26.82802857,112.5747161,26.82799153,112.5747337,26.82795388,112.5747518,26.82791476,112.5747694,26.82787675,112.574788,26.82783641,112.574806,26.82779729,112.5748231,26.8277604,112.5748395,26.82772485,112.5748564,26.82768796,112.5748761,26.82764503,112.5748931,26.82760822,112.5749106,26.82757017,112.5749288,26.82753095,112.5749462,26.82749347,112.5749641,26.82745489,112.5749821,26.82741615,112.5750005,26.82737629,112.5750181,26.82733827,112.5750362,26.82729917,112.5750545,26.82725996,112.5750729,26.82722067,112.5750915,26.82718128,112.5751103,26.82714182,112.5751297,26.82710132,112.5751483,26.82706278,112.5751674,26.82702322,112.5751871,26.82698264,112.5752058,26.826944,112.5752251,26.82690436,112.5752444,26.82686463,112.5752644,26.8268238,112.5752836,26.82678487,112.5753034,26.82674487,112.5753233,26.82670481,112.5753432,26.82666475,112.5753631,26.82662487,112.5753828,26.82658516,112.5754031,26.82654453,112.5754223,26.82650587,112.5754421,26.82646619,112.5754619,26.82642647,112.5754823,26.82638576,112.5755017,26.826347,112.5755218,26.8263072,112.5755424,26.82626639,112.5755621,26.82622756,112.5755823,26.82618778,112.5756025,26.82614805,112.5756233,26.82610736,112.575643,26.82606871,112.5756633,26.82602905,112.5756843,26.82598828,112.5757044,26.8259494,112.5757253,26.8259094,112.5757462,26.82586928,112.5757678,26.82582818,112.5757884,26.82578909,112.5758095,26.82574899,112.5758308,26.82570888,112.5758521,26.8256687,112.5758736,26.82562842,112.5758957,26.82558697,112.5759169,26.82554742,112.5759365,26.82551078,112.5759557,26.82547503,112.575975,26.82543918,112.5759945,26.82540325,112.5760165,26.82536312,112.576037,26.82532598,112.5760593,26.82528568,112.5760823,26.82524415,112.5761058,26.82520135,112.5761282,26.82516047,112.5761512,26.8251184,112.5761715,26.82508155,112.5761918,26.8250446,112.5762122,26.8250075,112.5762328,26.82497025,112.5762536,26.8249329,112.5762747,26.82489549,112.576296,26.82485808,112.5763176,26.82482065,112.5763394,26.82478315,112.5763614,26.82474563,112.5763836,26.82470807,112.5764059,26.82467045,112.5764282,26.82463279,112.5764507,26.82459504,112.5764732,26.82455714,112.5764959,26.82451906,112.5765187,26.8244808,112.5765414,26.82444236,112.5765643,26.82440377,112.5765873,26.82436503,112.5766103,26.8243262,112.5766333,26.8242873,112.5766563,26.82424836,112.5766793,26.82420936,112.5767024,26.82417035,112.5767255,26.82413139,112.5767486,26.82409266,112.5767718,26.82405426,112.5767952,26.82401617,112.5768184,26.82397842,112.5768415,26.82394106,112.5768675,26.82389881,112.57689,26.8238624,112.5769121,26.82382648,112.5769377,26.82378503,112.5769617,26.82374607,112.5769862,26.82370623,112.5770106,26.82366648,112.5770325,26.8236307,112.577056,26.82359184,112.5770776,26.82355585,112.5770985,26.82352077,112.5771191,26.82348565,112.5771395,26.82345051,112.5771598,26.82341535,112.5771798,26.82338019,112.5772019,26.82334115,112.5772242,26.82330145,112.5772462,26.82326217,112.5772682,26.82322307,112.5772905,26.82318416,112.577313,26.82314536,112.5773362,26.82310578,112.5773584,26.8230684,112.5773813,26.82303052,112.5774047,26.82299227,112.5774275,26.82295555,112.5774498,26.82292036,112.5774726,26.82288478,112.577496,26.82284873,112.577518,26.82281481,112.5775436,26.82277584,112.5775668,26.8227404,112.5775889,26.82270667,112.5776116,26.82267202,112.577635,26.82263636,112.5776572,26.82260227,112.5776799,26.82256708,112.5777022,26.82253158,112.5777246,26.82249483,112.5777455,26.82245955,112.5777668,26.8224232,112.5777883,26.82238602,112.5778084,26.82235089,112.5778313,26.82231089,112.5778521,26.82227511,112.5778746,26.82223755,112.5778983,26.82219925,112.5779212,26.82216358,112.5779447,26.82212803,112.5779687,26.82209266,112.5779915,26.82205946,112.5780155,26.82202476,112.5780386,26.82199153,112.578063,26.82195673,112.5780866,26.82192336,112.5781108,26.82188914,112.5781349,26.82185496,112.5781588,26.82182106,112.578183,26.82178691,112.5782056,26.82175498,112.5782284,26.82172268,112.578252,26.82168907,112.5782738,26.82165769,112.578297,26.82162352,112.578319,26.82159035,112.57834,26.82155755,112.5783603,26.82152419,112.578379,26.82149185,112.5783968,26.82146083,112.5784156,26.8214279,112.5784338,26.82139713,112.5784526,26.82136704,112.5784737,26.82133537,112.5784954,26.82130434,112.5785179,26.82127371,112.5785392,26.82124509,112.5785613,26.82121474,112.5785826,26.82118459,112.578603,26.82115312,112.5786192,26.82112113,112.5786297,26.82108804,112.5786344,26.82105208,112.5786328,26.82101569,112.5786258,26.82097918,112.5786153,26.82094473,112.5786011,26.8209112,112.5785817,26.82087705,112.5785582,26.82084558,112.5785324,26.82081834,112.5785038,26.82079259,112.5784737,26.8207676,112.5784418,26.82074259,112.5784091,26.82071846,112.578379,26.82069718,112.5783473,26.82067552,112.5783147,26.82065364,112.5782815,26.82063157,112.5782474,26.82060937,112.5782152,26.82058867,112.5781801,26.8205663,112.5781471,26.8205455,112.5781091,26.82052165,112.5780759,26.82050087,112.578042,26.82047964,112.5780081,26.8204585,112.5779742,26.82043738,112.5779398,26.82041587,112.577907,26.82039532,112.5778726,26.82037382,112.57784,26.82035339,112.5778063,26.82033228,112.5777708,26.82030994,112.5777338,26.82028685";
+
+    private void loadRomaRoad() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(ROMA_ROAD).append(ROMA_ROAD_1);
+        setRoamTrajectory(buffer.toString());
+    }
+
     @Override
     public boolean onTouch(@Nullable MotionEvent motionEvent) {
         MogoMapListenerHandler.Companion.getMogoMapListenerHandler().onTouch(motionEvent);
@@ -782,6 +800,8 @@ public class AMapViewWrapper implements IMogoMapView,
                 return MAP_STYLE_VR_ANGLE_TOP;
             case 5:
                 return MAP_STYLE_VR_ANGLE_CROSS;
+            case 7:
+                return MAP_STYLE_VR_ROMA;
             default:
                 return MODE_MEDIUM_SIGHT;
         }
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
index 5e092f589e..d471356be8 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java
@@ -6,6 +6,7 @@ import android.graphics.Point;
 import android.util.Pair;
 
 import com.mogo.eagle.core.data.config.FunctionBuildConfig;
+import com.mogo.eagle.core.data.map.MogoLatLng;
 import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
 import com.mogo.map.center.CenterLine;
 import com.mogo.map.marker.AMapInfoWindowAdapter;
@@ -41,6 +42,7 @@ import java.util.HashMap;
 import java.util.List;
 
 import mogo.telematics.pad.MessagePad;
+import mogo.yycp.api.proto.SocketDownData;
 
 /**
  * @author congtaowang
@@ -123,6 +125,24 @@ public class AMapWrapper implements IMogoMap {
         MarkerHelper.INSTANCE.updateBatchMarkerPositon(markerOptionsArrayList, false, FunctionBuildConfig.isBeautyMode ? 8.0f : 0f, 1, time, 1);
     }
 
+    @SuppressLint("NewApi")
+    @Override
+    public void updateBatchAiMarkerPosition(HashMap optionsArrayList) {
+        if (!checkAMap()) {
+            return;
+        }
+        ArrayList markerOptionsArrayList = new ArrayList<>();
+        optionsArrayList.forEach((s, trackedObject) -> {
+            MarkerSimpleData markerOptions = ObjectUtils.fromAiData(trackedObject);
+            if (markerOptions != null) {
+                markerOptionsArrayList.add(markerOptions);
+            }
+        });
+        long time = markerOptionsArrayList.get(0).getTime();
+        // 最后一个参数,是否管理锚点的删除
+        MarkerHelper.INSTANCE.updateBatchMarkerPositon(markerOptionsArrayList, false, FunctionBuildConfig.isBeautyMode ? 8.0f : 0f, 1, time, 0);
+    }
+
     @Override
     public String addPreVehicleModel(int type, int modelRes) {
         try {
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
index a0e6c9c882..e46f160a1a 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
@@ -16,6 +16,7 @@ import com.mogo.map.uicontroller.VisualAngleMode;
 
 import java.util.List;
 
+
 /**
  * @author congtaowang
  * @since 2019-12-26
@@ -81,6 +82,23 @@ public class MogoMapUIController implements IMogoMapUIController {
         }
     }
 
+    @Override
+    public void setRoamTrajectory(String trajectory) {
+        initDelegate();
+        if (mDelegate != null) {
+            mDelegate.setRoamTrajectory(trajectory);
+        }
+    }
+
+    @Override
+    public void setRomaMode(int mode) {
+        initDelegate();
+        if (mDelegate != null) {
+            CallerLogger.INSTANCE.d(TAG, "set setRomaMode: " + mode);
+            mDelegate.setRomaMode(mode);
+        }
+    }
+
     @Override
     public VisualAngleMode getCurrentMapVisualAngle() {
         initDelegate();
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java
index b37d3934f3..ceb1a65a6b 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java
@@ -15,6 +15,7 @@ import java.util.List;
 import java.util.Map;
 
 import mogo.telematics.pad.MessagePad;
+import mogo.yycp.api.proto.SocketDownData;
 
 /**
  * @author congtaowang
@@ -29,17 +30,17 @@ public class MogoMarkerManager implements IMogoMarkerManager {
     private static volatile MogoMarkerManager sInstance;
     private Context mApplicationContext;
 
-    private MogoMarkerManager( Context context ) {
-        if ( context != null ) {
+    private MogoMarkerManager(Context context) {
+        if (context != null) {
             mApplicationContext = context.getApplicationContext();
         }
     }
 
-    public static MogoMarkerManager getInstance( Context context ) {
-        if ( sInstance == null ) {
-            synchronized ( MogoMarkerManager.class ) {
-                if ( sInstance == null ) {
-                    sInstance = new MogoMarkerManager( context );
+    public static MogoMarkerManager getInstance(Context context) {
+        if (sInstance == null) {
+            synchronized (MogoMarkerManager.class) {
+                if (sInstance == null) {
+                    sInstance = new MogoMarkerManager(context);
                 }
             }
         }
@@ -51,27 +52,27 @@ public class MogoMarkerManager implements IMogoMarkerManager {
     }
 
     @Override
-    public IMogoMarker addMarker( String tag, MogoMarkerOptions options ) {
+    public IMogoMarker addMarker(String tag, MogoMarkerOptions options) {
         try {
-            return MogoMap.getInstance().getMogoMap().addMarker( tag, options );
-        } catch ( Exception e ) {
+            return MogoMap.getInstance().getMogoMap().addMarker(tag, options);
+        } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
     }
 
     @Override
-    public List< IMogoMarker > addMarkers( String tag, ArrayList< MogoMarkerOptions > options, boolean moveToCenter ) {
+    public List addMarkers(String tag, ArrayList options, boolean moveToCenter) {
         try {
-            return MogoMap.getInstance().getMogoMap().addMarkers( tag, options, moveToCenter );
-        } catch ( Exception e ) {
+            return MogoMap.getInstance().getMogoMap().addMarkers(tag, options, moveToCenter);
+        } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
     }
 
     @Override
-    public void updateBatchMarkerPosition(HashMap optionsArrayList) {
+    public void updateBatchMarkerPosition(HashMap optionsArrayList) {
         try {
             MogoMap.getInstance().getMogoMap().updateBatchMarkerPosition(optionsArrayList);
         } catch (Exception e) {
@@ -79,6 +80,15 @@ public class MogoMarkerManager implements IMogoMarkerManager {
         }
     }
 
+    @Override
+    public void updateBatchAiMarkerPosition(HashMap optionsArrayList) {
+        try {
+            MogoMap.getInstance().getMogoMap().updateBatchAiMarkerPosition(optionsArrayList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     public String addPreVehicleModel(int type, int modelRes) {
         try {
@@ -100,9 +110,9 @@ public class MogoMarkerManager implements IMogoMarkerManager {
 
 
     @Override
-    public void removeMarkers( String tag ) {
+    public void removeMarkers(String tag) {
         CallMarkersClearManager.INSTANCE.invokeClearAllMarkersOfTag(tag);
-        MogoMarkersHandler.Companion.getMogoMarkersHandler().remove( tag );
+        MogoMarkersHandler.Companion.getMogoMarkersHandler().remove(tag);
     }
 
     @Override
@@ -123,27 +133,27 @@ public class MogoMarkerManager implements IMogoMarkerManager {
     }
 
     @Override
-    public void inVisibleWithoutMarkers(String ...owner) {
+    public void inVisibleWithoutMarkers(String... owner) {
         MogoMarkersHandler.Companion.getMogoMarkersHandler().inVisibleMarkers(owner);
     }
 
     @Override
-    public List< IMogoMarker > getMarkers( String tag ) {
-        return MogoMarkersHandler.Companion.getMogoMarkersHandler().getMarkers( tag );
+    public List getMarkers(String tag) {
+        return MogoMarkersHandler.Companion.getMogoMarkersHandler().getMarkers(tag);
     }
 
     @Override
-    public Map< String, List< IMogoMarker > > getAllMarkers() {
+    public Map> getAllMarkers() {
         return MogoMarkersHandler.Companion.getMogoMarkersHandler().getAllMarkers();
     }
 
     @Override
-    public void removeMarkersExcept( String tag ) {
-        MogoMarkersHandler.Companion.getMogoMarkersHandler().deleteAllExcept( tag );
+    public void removeMarkersExcept(String tag) {
+        MogoMarkersHandler.Companion.getMogoMarkersHandler().deleteAllExcept(tag);
     }
 
     @Override
-    public void addRouteWay(Context context, MogoLatLng startPoint, MogoLatLng endPoint, List< MogoLatLng > wayPoints ) {
+    public void addRouteWay(Context context, MogoLatLng startPoint, MogoLatLng endPoint, List wayPoints) {
     }
 
     @Override
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
index 7c2283a699..9da7c35e7a 100644
--- 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
@@ -11,6 +11,7 @@ import com.zhidaoauto.map.sdk.open.MapAutoApi;
 
 import java.util.List;
 
+
 /**
  * @author congtaowang
  * @since 2019-12-26
@@ -19,8 +20,6 @@ import java.util.List;
  */
 public class AMapUIController implements IMogoMapUIController {
 
-    private static final String TAG = "AMapUIController";
-
     private static volatile AMapUIController sInstance;
 
     private IMogoMapUIController mClient;
@@ -70,6 +69,20 @@ public class AMapUIController implements IMogoMapUIController {
         }
     }
 
+    @Override
+    public void setRoamTrajectory(String trajectory) {
+        if (mClient != null) {
+            mClient.setRoamTrajectory(trajectory);
+        }
+    }
+
+    @Override
+    public void setRomaMode(int mode) {
+        if (mClient != null) {
+            mClient.setRomaMode(mode);
+        }
+    }
+
     @Override
     public VisualAngleMode getCurrentMapVisualAngle() {
         if (mClient != null) {
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
index eeae86dd6b..95f035487e 100644
--- 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
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import mogo.telematics.pad.MessagePad;
+import mogo.yycp.api.proto.SocketDownData;
 
 /**
  * @author congtaowang
@@ -117,6 +118,26 @@ public class ObjectUtils {
         return markerOptions;
     }
 
+    public static MarkerSimpleData fromAiData(SocketDownData.CloudRoadDataProto aiData) {
+        if (aiData == null) {
+            return null;
+        }
+        MarkerSimpleData markerOptions = null;
+        try {
+            markerOptions = new MarkerSimpleData();
+            markerOptions.setId(aiData.getUuid().hashCode());
+            markerOptions.setMarkerType(aiData.getType());
+            markerOptions.setRotateAngle((float) aiData.getHeading());
+            markerOptions.setLat(aiData.getWgslat());
+            markerOptions.setLon(aiData.getWgslon());
+            markerOptions.setTime(Double.valueOf(aiData.getSatelliteTime()).longValue());
+            markerOptions.setColor("#00FF00FF");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return markerOptions;
+    }
+
     private static BitmapDescriptor getBitmapDescriptorFromMogo(MogoMarkerOptions options) {
         if (options == null) {
             return null;
diff --git a/modules.txt b/modules.txt
index c49fc8b512..acc4c7544b 100644
--- a/modules.txt
+++ b/modules.txt
@@ -17,7 +17,6 @@
 :test:crashreport
 :test:crashreport-apm
 :test:crashreport-noop
-:test:crashreport-upgrade
 :core:function-impl:mogo-core-function-datacenter
 :core:function-impl:mogo-core-function-hmi
 :core:function-impl:mogo-core-function-map
diff --git a/settings.gradle b/settings.gradle
index db91eb860a..45b91c2c77 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -55,9 +55,7 @@ include ':tts:tts-pad'
 
 // 测试DEBUG
 include ':test:crashreport'
-//include ':test:crashreport-bugly'
 include ':test:crashreport-noop'
-include ':test:crashreport-upgrade'
 include ':test:crashreport-apmbyte'
 
 //OCH 业务模块
diff --git a/test/crashreport-bugly/.gitignore b/test/crashreport-bugly/.gitignore
deleted file mode 100644
index 42afabfd2a..0000000000
--- a/test/crashreport-bugly/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/test/crashreport-bugly/build.gradle b/test/crashreport-bugly/build.gradle
deleted file mode 100644
index 570f29b445..0000000000
--- a/test/crashreport-bugly/build.gradle
+++ /dev/null
@@ -1,67 +0,0 @@
-plugins {
-    id 'com.android.library'
-    id 'kotlin-android'
-    id 'kotlin-android-extensions'
-    id 'kotlin-kapt'
-    id 'com.alibaba.arouter'
-}
-
-
-android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
-    // buildToolsVersion rootProject.ext.android.buildToolsVersion
-    defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
-        versionCode Integer.valueOf(VERSION_CODE)
-        versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
-
-        ndk {
-            // 设置支持的SO库架构
-            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
-        }
-
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-        consumerProguardFiles 'consumer-rules.pro'
-
-        //ARouter apt 参数
-        kapt {
-            useBuildCache = false
-            arguments {
-                arg("AROUTER_MODULE_NAME", project.getName())
-            }
-        }
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-    }
-}
-
-dependencies {
-    implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation rootProject.ext.dependencies.androidxappcompat
-
-    implementation rootProject.ext.dependencies.arouter
-    kapt rootProject.ext.dependencies.aroutercompiler
-
-    if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
-        api rootProject.ext.dependencies.crashreport
-        implementation rootProject.ext.dependencies.mogo_core_utils
-        implementation rootProject.ext.dependencies.mogocommons
-    } else {
-        api project(":test:crashreport")
-        implementation project(':core:mogo-core-utils')
-        implementation project(":foudations:mogo-commons")
-    }
-
-    implementation 'com.tencent.bugly:crashreport_upgrade:1.6.1'
-    //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
-    implementation 'com.tencent.bugly:nativecrashreport:latest.release'
-    //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0
-}
-
-apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/test/crashreport-bugly/consumer-rules.pro b/test/crashreport-bugly/consumer-rules.pro
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/test/crashreport-bugly/gradle.properties b/test/crashreport-bugly/gradle.properties
deleted file mode 100644
index 6b451eda5d..0000000000
--- a/test/crashreport-bugly/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-GROUP=com.mogo.test
-POM_ARTIFACT_ID=crashreport-bugly
-VERSION_CODE=1
diff --git a/test/crashreport-bugly/proguard-rules.pro b/test/crashreport-bugly/proguard-rules.pro
deleted file mode 100644
index 481bb43481..0000000000
--- a/test/crashreport-bugly/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/test/crashreport-bugly/src/main/AndroidManifest.xml b/test/crashreport-bugly/src/main/AndroidManifest.xml
deleted file mode 100644
index d9f7357150..0000000000
--- a/test/crashreport-bugly/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-    /
-
\ No newline at end of file
diff --git a/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java b/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java
deleted file mode 100644
index 549dee35e9..0000000000
--- a/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.mogo.test.crashreport.bugly;
-
-import android.content.Context;
-import android.text.TextUtils;
-
-import com.alibaba.android.arouter.facade.annotation.Route;
-import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
-import com.mogo.commons.debug.DebugConfig;
-import com.mogo.eagle.core.utilcode.util.AppUtils;
-import com.mogo.test.crashreport.CrashReportConstants;
-import com.mogo.test.crashreport.ITestCrashReportProvider;
-import com.tencent.bugly.Bugly;
-import com.tencent.bugly.crashreport.CrashReport;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
-
-/**
- * @author congtaowang
- * @since 2020/9/9
- *
- * 描述
- */
-//@Route(path = CrashReportConstants.PATH)
-public class BuglyCrashReportProvider implements ITestCrashReportProvider {
-
-    private static final String TAG = "BuglyCrashReportProvider";
-
-    @Override
-    public void init(Context context) {
-        String packageName = context.getPackageName();
-        String processName = getProcessName(android.os.Process.myPid());
-        CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context);
-        strategy.setUploadProcess(processName == null || processName.equals(packageName));
-        //该用户本次启动后的异常日志用户ID都将是 sn
-        CrashReport.setUserId(MoGoAiCloudClientConfig.getInstance().getSn());
-        String productFlavor = DebugConfig.getProductFlavor();
-        strategy.setAppChannel(productFlavor);
-        Bugly.init(context, CrashReportConstants.buglyAppID, true, strategy);
-        Bugly.putUserData(context, "serial", MoGoAiCloudClientConfig.getInstance().getSn());
-        String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context);
-        Bugly.putUserData(context, "MAP_SDK_VERSION", mapSDKVersion);
-    }
-
-    /**
-     * 获取进程号对应的进程名
-     *
-     * @param pid 进程号
-     * @return 进程名
-     */
-    private static String getProcessName(int pid) {
-        BufferedReader reader = null;
-        try {
-            reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"));
-            String processName = reader.readLine();
-            if (!TextUtils.isEmpty(processName)) {
-                processName = processName.trim();
-            }
-            return processName;
-        } catch (Throwable throwable) {
-            throwable.printStackTrace();
-        } finally {
-            try {
-                if (reader != null) {
-                    reader.close();
-                }
-            } catch (IOException exception) {
-                exception.printStackTrace();
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/test/crashreport-upgrade/.gitignore b/test/crashreport-upgrade/.gitignore
deleted file mode 100644
index 42afabfd2a..0000000000
--- a/test/crashreport-upgrade/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/test/crashreport-upgrade/build.gradle b/test/crashreport-upgrade/build.gradle
deleted file mode 100644
index 5bdd118607..0000000000
--- a/test/crashreport-upgrade/build.gradle
+++ /dev/null
@@ -1,63 +0,0 @@
-plugins {
-    id 'com.android.library'
-    id 'kotlin-android'
-    id 'kotlin-android-extensions'
-    id 'kotlin-kapt'
-    id 'com.alibaba.arouter'
-}
-
-android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
-    defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
-        versionCode Integer.valueOf(VERSION_CODE)
-        versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
-
-        ndk {
-            // 设置支持的SO库架构
-            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
-        }
-
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-        consumerProguardFiles 'consumer-rules.pro'
-
-        //ARouter apt 参数
-        kapt {
-            useBuildCache = false
-            arguments {
-                arg("AROUTER_MODULE_NAME", project.getName())
-            }
-        }
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-    }
-}
-
-dependencies {
-    implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation rootProject.ext.dependencies.androidxappcompat
-
-    implementation rootProject.ext.dependencies.arouter
-    kapt rootProject.ext.dependencies.aroutercompiler
-
-    if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
-        api rootProject.ext.dependencies.crashreport
-        implementation rootProject.ext.dependencies.mogo_core_utils
-        implementation rootProject.ext.dependencies.mogocommons
-    } else {
-        api project(":test:crashreport")
-        implementation project(':core:mogo-core-utils')
-        implementation project(":foudations:mogo-commons")
-    }
-
-    implementation 'com.tencent.bugly:crashreport_upgrade:1.6.1'
-    //其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
-}
-
-apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/test/crashreport-upgrade/consumer-rules.pro b/test/crashreport-upgrade/consumer-rules.pro
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/test/crashreport-upgrade/gradle.properties b/test/crashreport-upgrade/gradle.properties
deleted file mode 100644
index bcb33e8a94..0000000000
--- a/test/crashreport-upgrade/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-GROUP=com.mogo.test
-POM_ARTIFACT_ID=crashreport-upgrade
-VERSION_CODE=1
diff --git a/test/crashreport-upgrade/proguard-rules.pro b/test/crashreport-upgrade/proguard-rules.pro
deleted file mode 100644
index 68dec0863c..0000000000
--- a/test/crashreport-upgrade/proguard-rules.pro
+++ /dev/null
@@ -1,24 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
--dontwarn com.tencent.bugly.**
--keep public class com.tencent.bugly.**{*;}
--keep class android.support.**{*;}
diff --git a/test/crashreport-upgrade/src/main/AndroidManifest.xml b/test/crashreport-upgrade/src/main/AndroidManifest.xml
deleted file mode 100644
index 9f5b88a7f2..0000000000
--- a/test/crashreport-upgrade/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-    
-        
-            
-        
-
-        
-    
-
\ No newline at end of file
diff --git a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java b/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java
deleted file mode 100644
index 8e2b0380b8..0000000000
--- a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.mogo.test.crashreport.upgrade;
-
-
-/**
- * @author donghongyu
- * @since 2020/9/9
- * 

- * 描述 - */ -public class UpgradeReportConstants { - - public static final String PATH = "/upgradereport/api"; - - public static final String NAME = "UpgradeReportApi"; -} diff --git a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java b/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java deleted file mode 100644 index aeb73c0be8..0000000000 --- a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.mogo.test.crashreport.upgrade; - -import android.content.Context; -import android.text.TextUtils; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.alibaba.android.arouter.facade.template.IProvider; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.AppUtils; -import com.mogo.test.crashreport.CrashReportConstants; -import com.tencent.bugly.Bugly; -import com.tencent.bugly.crashreport.CrashReport; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - - -/** - * @author donghongyu - * @since 2020/9/9 - *

- * 升级模块 - */ -@Route(path = UpgradeReportConstants.PATH) -public class UpgradeReportProvider implements IProvider { - - private static final String TAG = "UpgradeReportProvider"; - - @Override - public void init(Context context) { - String packageName = context.getPackageName(); - String processName = getProcessName(android.os.Process.myPid()); - CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); - strategy.setUploadProcess(processName == null || processName.equals(packageName)); - - String productFlavor = DebugConfig.getProductFlavor(); - strategy.setAppChannel(productFlavor); - Bugly.init(context, CrashReportConstants.buglyAppID, true, strategy); - String sn = SharedPrefsMgr.getInstance(context).getString("sn"); - if (sn != null && !sn.isEmpty()) { - Bugly.putUserData(context, "serial", sn); - } - String mapSDKVersion = DebugConfig.getMapVersion(); - Bugly.putUserData(context, "MAP_SDK_VERSION", mapSDKVersion); - } - - /** - * 获取进程号对应的进程名 - * - * @param pid 进程号 - * @return 进程名 - */ - private static String getProcessName(int pid) { - BufferedReader reader = null; - try { - reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline")); - String processName = reader.readLine(); - if (!TextUtils.isEmpty(processName)) { - processName = processName.trim(); - } - return processName; - } catch (Throwable throwable) { - throwable.printStackTrace(); - } finally { - try { - if (reader != null) { - reader.close(); - } - } catch (IOException exception) { - exception.printStackTrace(); - } - } - return null; - } -} - diff --git a/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml b/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml deleted file mode 100644 index 1b4e49502c..0000000000 --- a/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file