[VisualAngle]升级地图sdk:修正crash;添加坐标转换;优化视角切换逻辑

This commit is contained in:
renwj
2022-03-23 11:42:28 +08:00
parent 22adb762c3
commit f37d8c996c
5 changed files with 58 additions and 41 deletions

View File

@@ -120,6 +120,8 @@ internal object FeedbackManager {
CallerLogger.d("${M_DEVA}${TAG}", "延时20秒开始....")
delay(20000) //延时20秒
CallerLogger.d("${M_DEVA}${TAG}", "延时20秒结束....")
record.text = "正在结束录制"
record.setTag(R.id.feed_back_badcase_tag, 2)
stopRecordBag(1, taskId)
}.also { itx ->
itx.invokeOnCompletion {

View File

@@ -1,10 +1,10 @@
package com.mogo.eagle.core.function.impl;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.function.api.map.IMogoMapService;
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager;
import com.mogo.map.MogoGeoSearch;
import com.mogo.map.MogoLocationClient;
import com.mogo.map.MogoMap;
@@ -84,6 +84,6 @@ public class MogoMapService implements IMogoMapService {
@Override
public void init(Context context) {
CallerVisualAngleManager.INSTANCE.init(context);
}
}

View File

@@ -1,14 +1,20 @@
package com.mogo.eagle.core.function.call.map
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.os.SystemClock
import androidx.lifecycle.Lifecycle.Event
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.data.map.MapRoadInfo.StopLine
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.OnRoadListener
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.CrossRoad
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.LowSpeed
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleOwner
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
@@ -55,29 +61,36 @@ object CallerVisualAngleManager {
val priority: Int
}
init {
CallerMapRoadListenerManager.registerRoadListener("VisualAngleChange", object : OnRoadListener {
private var roadId = ""
override fun onRoadIdInfo(roadId: String) {
val oldRoadId = this.roadId
if (oldRoadId != roadId) {
if (hasCrossRoad) {
hasCrossRoad = false
changeVisualAngle(Default())
}
private val listener = object : OnRoadListener {
private var roadId = ""
override fun onRoadIdInfo(roadId: String) {
val oldRoadId = this.roadId
if (oldRoadId != roadId) {
if (hasCrossRoad) {
hasCrossRoad = false
changeVisualAngle(Default())
}
this.roadId = roadId
}
this.roadId = roadId
}
override fun onStopLineInfo(info: StopLine) {
if (!hasCrossRoad && info.distanceOfCarToStopLine <= 30.0) {
hasCrossRoad = true
changeVisualAngle(CrossRoad)
override fun onStopLineInfo(info: StopLine) {
if (!hasCrossRoad && info.distanceOfCarToStopLine <= 30.0) {
hasCrossRoad = true
changeVisualAngle(CrossRoad)
}
}
}
fun init(ctx: Context) {
ctx.lifeCycleOwner.lifecycle.addObserver(object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Event) {
if (event == ON_DESTROY) {
CallerMapRoadListenerManager.unRegisterRoadListener("VisualAngleChange")
}
}
})
CallerMapRoadListenerManager.registerRoadListener("VisualAngleChange", listener)
}
sealed class Scene private constructor(): IAttach {

View File

@@ -82,7 +82,7 @@ MOGO_LOCATION_VERSION=1.3.32
MOGO_TELEMATIC_VERSION=1.3.32
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=2.0.9.2
MAP_SDK_VERSION=2.0.9.4
MAP_SDK_OPERATION_VERSION=1.0.12
# websocket
WEBSOCKET_VERSION=1.1.7

View File

@@ -1,5 +1,6 @@
package com.mogo.map;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_DEVA;
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;
@@ -29,7 +30,6 @@ import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager;
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager;
import com.mogo.eagle.core.function.call.map.CallerMapStyleListenerManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
@@ -177,7 +177,7 @@ public class AMapViewWrapper implements IMogoMapView,
public void onRoadIdInfo(@androidx.annotation.Nullable String roadId) {
if (roadId != null && !TextUtils.isEmpty(roadId)) {
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onRoadIdInfo::" + roadId);
CallerLogger.INSTANCE.d(M_DEVA + TAG, "onRoadIdInfo::" + roadId);
CallerMapRoadListenerManager.INSTANCE.invokeListenersOnRoadIdGet(roadId);
} else {
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onRoadIdInfo::null");
@@ -190,37 +190,39 @@ public class AMapViewWrapper implements IMogoMapView,
if (stopLine != null && !TextUtils.isEmpty(stopLine.road_id) && stopLine.points != null && stopLine.points.size() > 0) {
ArrayList<LonLatPoint> points = stopLine.points;
if (carLoc != null) {
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
/**
* //地图组提供的高德坐标切到WGS84坐标系
* var cal = LonLatPoint(point!!.lon, point!!.lat)
* if(!point!!.provider.equals(MapAutoApi.GPS_FLAG)){
* cal = MapTools.switchLonLatWGS84(cal)
* }
*/
String provider = carLoc.getProvider();
CallerLogger.INSTANCE.d(M_DEVA + TAG, "car_loc: " + carLoc + "");
if (!MapAutoApi.GPS_FLAG.equals(provider)) {
CallerLogger.INSTANCE.d(M_DEVA + TAG, "convert before: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}");
LonLatPoint p = new LonLatPoint(carLoc.getLongitude(), carLoc.getLatitude());
p = MapTools.INSTANCE.switchLonLatWGS84(p);
carLoc.setLongitude(p.longitude);
carLoc.setLatitude(p.latitude);
CallerLogger.INSTANCE.d(M_DEVA + TAG, "convert after: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}");
}
CallerLogger.INSTANCE.d(M_DEVA + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
MapRoadInfo.StopLine stopInfo = convert(stopLine);
LonLatPoint match = new LonLatPoint();
double ret = MapDataApi.INSTANCE.GetDisFromPointToLine(convert(carLoc), points, match, 1);
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onStopLineInfo: --- ret: "+ ret);
LonLatPoint p1 = points.get(0);
LonLatPoint p2 = points.get(points.size() - 1);
double distanceOfCarToStopLine = MapDataApi.INSTANCE.getNearstFromPointToSegment(carLoc.getLongitude(), carLoc.getLatitude(), p1.longitude, p1.latitude, p2.longitude, p2.latitude);
double distanceOfCarToStopLine = MapDataApi.INSTANCE.getNearstFromPointToSegment(carLoc.getLongitude(), carLoc.getLatitude(), p1.longitude, p1.latitude, p2.longitude, p2.latitude) * 10_0000;
stopInfo.setDistanceOfCarToStopLine(distanceOfCarToStopLine);
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onStopLineInfo: --- distance: "+ distanceOfCarToStopLine);
CallerLogger.INSTANCE.d(M_DEVA + TAG, "onStopLineInfo: --- distance: "+ distanceOfCarToStopLine);
CallerMapRoadListenerManager.INSTANCE.invokeListenersOnStopLineGet(stopInfo);
}
} else {
if (carLoc != null) {
CallerLogger.INSTANCE.d("${M_DEVA}${TAG}", "onStopLineInfo::null, car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
CallerLogger.INSTANCE.d(M_DEVA + TAG, "onStopLineInfo::null, car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
}
}
}
private @NotNull LonLatPoint convert(MogoLocation location) {
LonLatPoint point = new LonLatPoint();
point.latitude = location.getLatitude();
point.longitude = location.getLongitude();
point.altitude = location.getAltitude();
point.angle = location.getBearing();
point.speed = location.getSpeed();
point.angle = location.getBearing();
point.provider = location.getProvider();
return point;
}
private MapRoadInfo.StopLine convert(StopLine line) {
MapRoadInfo.StopLine ret = new MapRoadInfo.StopLine();
ret.setDistance(line.distance);