diff --git a/config.gradle b/config.gradle
index c38f80e8b7..2d94a623cc 100644
--- a/config.gradle
+++ b/config.gradle
@@ -157,7 +157,7 @@ ext {
gpssimulatordebug : "com.mogo.module:module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}",
gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}",
- adasapi : "com.zhidao.autopilot.support:adas:1.0.6.6",
+ adasapi : "com.zhidao.autopilot.support:adas:1.0.6.7",
adasconfigapi : "com.zhidao.adasconfig:adasconfig:1.1.5.2",
// 个人中心的SDK
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
index 8c77fbc934..e4d32ec638 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
@@ -403,4 +403,14 @@ public class DebugConfig {
public static void setUseAdasRtkLocationInfo( boolean sIsUseAdasRtkLocationInfo ) {
DebugConfig.sIsUseAdasRtkLocationInfo = sIsUseAdasRtkLocationInfo;
}
+
+ public static boolean sIsNotSmooth = false;
+
+ public static boolean isNotSmooth() {
+ return sIsNotSmooth;
+ }
+
+ public static void setNotSmooth( boolean sIsNotSmooth ) {
+ DebugConfig.sIsNotSmooth = sIsNotSmooth;
+ }
}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java
index 0b7281621a..d75732e362 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java
@@ -1,80 +1,84 @@
package com.mogo.utils;
+import org.jetbrains.annotations.NotNull;
+
+import java.math.BigDecimal;
+
/**
* @author donghongyu
*/
public class CoordinateUtils {
- private static double a = 6378245.0;
- private static double ee = 0.00669342162296594323;
-
- /**
- * 手机GPS坐标转火星坐标
- *
- * @return
- */
- public static double[] transformFromWGSToGCJ( double lat, double lon ) {
-
- //如果在国外,则默认不进行转换
- if ( outOfChina( lat, lon ) ) {
- return new double[]{lat, lon};
- }
- double dLat = transformLat( lon - 105.0, lat - 35.0 );
- double dLon = transformLon( lon - 105.0, lat - 35.0 );
- double radLat = lat / 180.0 * Math.PI;
- double magic = Math.sin( radLat );
- magic = 1 - ee * magic * magic;
- double sqrtMagic = Math.sqrt( magic );
- dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI );
- dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI );
-
- return new double[]{lat + dLat, lon + dLon};
- }
-
- public static double transformLat( double x, double y ) {
- double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt( x > 0 ? x : -x );
- ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
- ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0 * Math.PI ) ) * 2.0 / 3.0;
- ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y * Math.PI / 30.0 ) ) * 2.0 / 3.0;
- return ret;
- }
-
- public static double transformLon( double x, double y ) {
- double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt( x > 0 ? x : -x );
- ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
- ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0 * Math.PI ) ) * 2.0 / 3.0;
- ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x / 30.0 * Math.PI ) ) * 2.0 / 3.0;
- return ret;
- }
-
- public static boolean outOfChina( double lat, double lon ) {
- if ( lon < 72.004 || lon > 137.8347 )
- return true;
- if ( lat < 0.8293 || lat > 55.8271 )
- return true;
- return false;
- }
-
- public static final double[] transformGcj02toWgs84( double lat, double lng ) {
- double[] var10000;
- if ( outOfChina( lat, lng ) ) {
- var10000 = new double[]{lng, lat};
- } else {
- double dlat = transformLat( lng - 105.0D, lat - 35.0D );
- double dlng = transformLon( lng - 105.0D, lat - 35.0D );
- double radlat = lat / 180.0D * Math.PI;
- double magic = Math.sin( radlat );
- magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
- double sqrtmagic = Math.sqrt( magic );
- dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * Math.PI );
- dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * Math.PI );
- double mglat = lat + dlat;
- double mglng = lng + dlng;
- var10000 = new double[]{lng * ( double ) 2 - mglng, lat * ( double ) 2 - mglat};
- }
-
- return var10000;
- }
+// private static double a = 6378245.0;
+// private static double ee = 0.00669342162296594323;
+//
+// /**
+// * 手机GPS坐标转火星坐标
+// *
+// * @return
+// */
+// public static double[] transformFromWGSToGCJ( double lat, double lon ) {
+//
+// //如果在国外,则默认不进行转换
+// if ( outOfChina( lat, lon ) ) {
+// return new double[]{lat, lon};
+// }
+// double dLat = transformLat( lon - 105.0, lat - 35.0 );
+// double dLon = transformLon( lon - 105.0, lat - 35.0 );
+// double radLat = lat / 180.0 * Math.PI;
+// double magic = Math.sin( radLat );
+// magic = 1 - ee * magic * magic;
+// double sqrtMagic = Math.sqrt( magic );
+// dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI );
+// dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI );
+//
+// return new double[]{lat + dLat, lon + dLon};
+// }
+//
+// public static double transformLat( double x, double y ) {
+// double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt( x > 0 ? x : -x );
+// ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
+// ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0 * Math.PI ) ) * 2.0 / 3.0;
+// ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y * Math.PI / 30.0 ) ) * 2.0 / 3.0;
+// return ret;
+// }
+//
+// public static double transformLon( double x, double y ) {
+// double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt( x > 0 ? x : -x );
+// ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
+// ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0 * Math.PI ) ) * 2.0 / 3.0;
+// ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x / 30.0 * Math.PI ) ) * 2.0 / 3.0;
+// return ret;
+// }
+//
+// public static boolean outOfChina( double lat, double lon ) {
+// if ( lon < 72.004 || lon > 137.8347 )
+// return true;
+// if ( lat < 0.8293 || lat > 55.8271 )
+// return true;
+// return false;
+// }
+//
+// public static final double[] transformGcj02toWgs84( double lat, double lng ) {
+// double[] var10000;
+// if ( outOfChina( lat, lng ) ) {
+// var10000 = new double[]{lng, lat};
+// } else {
+// double dlat = transformLat( lng - 105.0D, lat - 35.0D );
+// double dlng = transformLon( lng - 105.0D, lat - 35.0D );
+// double radlat = lat / 180.0D * Math.PI;
+// double magic = Math.sin( radlat );
+// magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
+// double sqrtmagic = Math.sqrt( magic );
+// dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * Math.PI );
+// dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * Math.PI );
+// double mglat = lat + dlat;
+// double mglng = lng + dlng;
+// var10000 = new double[]{lng * ( double ) 2 - mglng, lat * ( double ) 2 - mglat};
+// }
+//
+// return var10000;
+// }
/**
* @param lon1
@@ -116,4 +120,84 @@ public class CoordinateUtils {
}
}
+
+ // ------
+ private static final double x_PI = 52.35987755982988D;
+ private static final double PI = 3.141592653589793D;
+ private static final double a = 6378245.0D;
+ private static final double ee = 0.006693421622965943D;
+
+ public static final boolean outOfChina( double lat, double lng ) {
+ return lng <= 73.66D || lng >= 135.05D || lat <= 3.86D || lat >= 53.55D;
+ }
+
+ private static final double transformLat( double lng, double lat ) {
+ double ret = -100.0D + 2.0D * lng + 3.0D * lat + 0.2D * lat * lat + 0.1D * lng * lat + 0.2D * Math.sqrt( Math.abs( lng ) );
+ ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 20.0D * Math.sin( lat * 3.141592653589793D ) + 40.0D * Math.sin( lat / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 160.0D * Math.sin( lat / 12.0D * 3.141592653589793D ) + ( double ) 320 * Math.sin( lat * 3.141592653589793D / 30.0D ) ) * 2.0D / 3.0D;
+ return ret;
+ }
+
+ private static final double transformLon( double lng, double lat ) {
+ double ret = 300.0D + lng + 2.0D * lat + 0.1D * lng * lng + 0.1D * lng * lat + 0.1D * Math.sqrt( Math.abs( lng ) );
+ ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 20.0D * Math.sin( lng * 3.141592653589793D ) + 40.0D * Math.sin( lng / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 150.0D * Math.sin( lng / 12.0D * 3.141592653589793D ) + 300.0D * Math.sin( lng / 30.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ return ret;
+ }
+
+ @NotNull
+ // World Geodetic System ==> Mars Geodetic System
+ public static final double[] transformWgsToGcj( double wgLat, double wgLon ) {
+ double[] point = new double[2];
+ if ( outOfChina( wgLat, wgLon ) ) {
+ point[0] = wgLon;
+ point[1] = wgLat;
+ return point;
+ } else {
+ double dLat = transformLat( wgLon - 105.0D, wgLat - 35.0D );
+ double dLon = transformLon( wgLon - 105.0D, wgLat - 35.0D );
+ double radLat = wgLat / 180.0D * 3.141592653589793D;
+ double magic = Math.sin( radLat );
+ magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
+ double sqrtMagic = Math.sqrt( magic );
+ dLat = dLat * 180.0D / ( 6335552.717000426D / ( magic * sqrtMagic ) * 3.141592653589793D );
+ dLon = dLon * 180.0D / ( 6378245.0D / sqrtMagic * Math.cos( radLat ) * 3.141592653589793D );
+ double mgLat = wgLat + dLat;
+ double mgLon = wgLon + dLon;
+ point[0] = dealRound( mgLon );
+ point[1] = dealRound( mgLat );
+ return point;
+ }
+ }
+
+ @NotNull
+ public static final double[] transformGcj02toWgs84( double lat, double lng ) {
+ double[] var10000;
+ if ( outOfChina( lat, lng ) ) {
+ var10000 = new double[]{lng, lat};
+ } else {
+ double dlat = transformLat( lng - 105.0D, lat - 35.0D );
+ double dlng = transformLon( lng - 105.0D, lat - 35.0D );
+ double radlat = lat / 180.0D * 3.141592653589793D;
+ double magic = Math.sin( radlat );
+ magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
+ double sqrtmagic = Math.sqrt( magic );
+ dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * 3.141592653589793D );
+ dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * 3.141592653589793D );
+ double mglat = lat + dlat;
+ double mglng = lng + dlng;
+ var10000 = new double[]{dealRound( lng * ( double ) 2 - mglng ), dealRound( lat * ( double ) 2 - mglat )};
+ }
+
+ return var10000;
+ }
+
+ private static final double dealRound( double value ) {
+ BigDecimal bg = new BigDecimal( value );
+ double result = bg.setScale( 6, 4 ).doubleValue();
+ return result;
+ }
+
}
diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle
index 8794206130..fa504e51c5 100644
--- a/libraries/map-custom/build.gradle
+++ b/libraries/map-custom/build.gradle
@@ -67,7 +67,7 @@ dependencies {
implementation project(':foudations:mogo-commons')
}
- implementation 'com.zhidaoauto.machine:map:1.0.0-vr-7.9.5'
+ implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.0.5'
// implementation 'com.zhidaoauto.machine:map:1.0.0-vr-test-3.4'
}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
index b07f2f877b..8515dc0e18 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
@@ -33,6 +33,7 @@ import com.mogo.map.uicontroller.MapControlResult;
import com.mogo.utils.TipToast;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
import com.zhidaoauto.map.sdk.open.MapAutoApi;
import com.zhidaoauto.map.sdk.open.abs.MapStatusListener;
import com.zhidaoauto.map.sdk.open.abs.OnCameraChangeListener;
@@ -190,6 +191,7 @@ public class AMapViewWrapper implements IMogoMapView,
mMapView.setOnMapTouchListener( this );
mMapView.setOnMapClickListener( this );
mMapView.getLocationClient().registerListener( this );
+// mMapView.getLocationClient().registerGpsListener( this );
mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_ZOOM );
mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_ROTATE );
mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_3D );
@@ -754,7 +756,6 @@ public class AMapViewWrapper implements IMogoMapView,
try {
mSelfMarker = mMapView.getMapAutoViewHelper().getMyLocationStyle().getSelfMarker();
mSelfMarker.setInfoWindowEnable( true );
- mSelfMarker.setInfoWindowOffset( 0, -200 );
} catch ( Exception e ) {
}
}
@@ -958,7 +959,7 @@ public class AMapViewWrapper implements IMogoMapView,
public void rtkEnable( boolean enable ) {
try {
mRtkEnable = !mRtkEnable;
- TipToast.shortTip( mRtkEnable ? "已开启gps道路匹配" : "已开启rtk道路匹配" );
+ TipToast.shortTip( mRtkEnable ? "已开启rtk道路匹配" : "已开启gps道路匹配" );
mMapView.getLocationClient().rtkEnable( mRtkEnable );
} catch ( Exception e ) {
Logger.e( TAG, e, "rtkEnable" );
@@ -994,7 +995,7 @@ public class AMapViewWrapper implements IMogoMapView,
bean.setLon( lon );
bean.setGnss_speed( ( ( float ) speed ) );
bean.setLat( lat );
+ Logger.d( "ADASCOOR", "使用rtk定位数据%s", GsonUtil.jsonFromObject( bean ) );
mMapView.getLocationClient().updateRTKAutoPilotLocation( bean );
- Logger.d( TAG, "使用rtk定位数据" );
}
}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java
index 0ddfa645ad..fd3b96d834 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java
@@ -72,7 +72,7 @@ public class ALocationClient implements IMogoLocationClient {
destroyWarming();
return;
}
- if ( mClient != null && mClient.isStarted() ) {
+ if ( mClient != null && mClient.isAGpsStarted() ) {
mClient.stop();
}
}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java
index 9bc315a7b6..a385a74ebc 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java
@@ -75,6 +75,7 @@ public class ObjectUtils {
.anchor(opt.getU(), opt.getV())
.icons( descriptors )
.period( opt.getPeriod() )
+ .controlAngle( opt.isControlAngle() )
.rotateAngle(opt.getRotate())
.setFlat(opt.isFlat())
.visible(opt.isVisible())
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
index aba47f247f..0ad77d7a28 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
@@ -79,6 +79,17 @@ public class MogoMarkerOptions extends Observable {
private boolean mIs3DMode = false;
+ private boolean mIsControlAngle = false;
+
+ public MogoMarkerOptions controlAngle( boolean controlAngle ) {
+ this.mIsControlAngle = controlAngle;
+ return this;
+ }
+
+ public boolean isControlAngle() {
+ return mIsControlAngle;
+ }
+
public MogoMarkerOptions set3DMode( boolean is3DMode ) {
mIs3DMode = is3DMode;
return this;
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java
index 76ad6b0406..eaf4212428 100644
--- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java
@@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.module.common.MogoModulePaths;
+import com.mogo.module.common.utils.CarSeries;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
@@ -48,14 +49,11 @@ public class BackToLauncherModuleProvider implements IMogoModuleProvider {
@Override
public void init( Context context ) {
- final String product = DebugConfig.getProductFlavor();
- if ( product != null ) {
+ if ( CarSeries.isF8xxSeries() ) {
+ BackToMainHomeManager.addMainHomeView();
+ } else {
+ final String product = DebugConfig.getProductFlavor();
switch ( product ) {
- case "f80x":
- case "f8xx":
- case "f8Amap":
- BackToMainHomeManager.addMainHomeView();
- break;
case "changanauto":
if ( DebugConfig.isDebug() ) {
BackToMainHomeManager.addMainHomeView();
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java
index 9051634f8b..b68ec2476b 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java
@@ -1,13 +1,13 @@
package com.mogo.module.common.drawer;
import android.content.Context;
-import android.os.SystemClock;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
@@ -39,7 +39,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
mContext = AbsMogoApplication.getApp();
}
- private Map< String, MogoLatLng > mLastPositions = new ConcurrentHashMap<>();
+ private Map< String, ADASRecognizedListResult > mLastPositions = new ConcurrentHashMap<>();
public static AdasRecognizedResultDrawer getInstance() {
if ( sInstance == null ) {
@@ -94,36 +94,34 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
continue;
}
mAdasRecognizedMarkersCaches.put( uniqueKey, marker );
- }
-
- MogoLatLng lastPosition = mLastPositions.get( uniqueKey );
-
- List< MogoLatLng > points = new ArrayList<>();
- MogoLatLng endLatLon = null;
- if ( recognizedListResult.latLonList != null
- && recognizedListResult.latLonList.size() > 1 ) {
- for ( int j = 0; j < recognizedListResult.latLonList.size(); j++ ) {
- ADASRecognizedListResult.LatLon latLon = recognizedListResult.latLonList.get( j );
- if ( latLon == null ) {
- continue;
+ mLastPositions.put( uniqueKey, recognizedListResult );
+ } else {
+ ADASRecognizedListResult lastPosition = mLastPositions.get( uniqueKey );
+ mLastPositions.put( uniqueKey, recognizedListResult );
+ if ( lastPosition != null ) {
+ List< MogoLatLng > points = new ArrayList<>();
+ MogoLatLng endLatLon = new MogoLatLng( recognizedListResult.lat, recognizedListResult.lon );
+ points.add( new MogoLatLng( lastPosition.lat, lastPosition.lon ) );
+ points.add( endLatLon );
+ if ( DebugConfig.isNotSmooth() ) {
+ marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
+ } else {
+ long interval = recognizedListResult.systemTime - lastPosition.systemTime;
+ if ( interval < 45 ) {
+ interval = 45;
+ }
+ interval -= 25;
+ marker.startSmoothInMs( points, interval );
}
- points.add( endLatLon = new MogoLatLng( latLon.lat, latLon.lon ) );
+ } else {
+ marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
}
-
- } else if ( recognizedListResult.latLonList != null
- && recognizedListResult.latLonList.size() == 1 ) {
- // 原来的点和新的点做一个数组进行平滑移动
- ADASRecognizedListResult.LatLon latLon = recognizedListResult.latLonList.get( 0 );
- if ( latLon == null ) {
- continue;
- }
- points.add( lastPosition );
- points.add( endLatLon = new MogoLatLng( latLon.lat, latLon.lon ) );
- }
- mLastPositions.put( uniqueKey, endLatLon );
- if ( points.size() >= 1 ) {
- marker.startSmoothInMs( points, 100 );
}
+ showSelfSpeed( mContext,
+ marker,
+ recognizedListResult.speed,
+ MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()
+ );
}
}
@@ -175,9 +173,10 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
.owner( DataTypes.TYPE_MARKER_ADAS )
.anchor( 0.5f, 0.5f )
.set3DMode( true )
+ .controlAngle( true )
.icon3DRes( getVrModel() )
.rotate( ( float ) recognizedListResult.heading )
- .position( new MogoLatLng( recognizedListResult.latLonList.get( 0 ).lat, recognizedListResult.latLonList.get( 0 ).lon ) );
+ .position( new MogoLatLng( recognizedListResult.lat, recognizedListResult.lon ) );
return MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_ADAS, options );
}
@@ -185,21 +184,4 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
return R.raw.carred;
}
- private View inflateView( ADASRecognizedListResult data, boolean machineVision, double curSpeed ) {
- View rootView = LayoutInflater.from( AbsMogoApplication.getApp() ).inflate( R.layout.module_commons_layout_car, null );
-// SafeType safeType = getSafeType( data.distanceX, data.distanceY, data.speed, curSpeed );
-// TextView tv = rootView.findViewById( R.id.module_commons_marker_car_speed );
-// tv.setText( safeType.getMsg() );
- ImageView iv = rootView.findViewById( R.id.module_commons_marker_car_model );
-// iv.setImageResource( MarkerResourceManager.getMarkerDrawableResId(
-// machineVision ? VisionMode.Machine : VisionMode.User,
-// AdasRecognizedType.valueFrom( data.type ),
-// getCarModelType(),
-// safeType
-// ) );
-
- iv.setImageResource( R.drawable.icon_map_marker_car_gray );
- return rootView;
- }
-
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
index 8536bd14fe..5544ee36a2 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
@@ -21,6 +21,7 @@ import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.R;
import com.mogo.module.common.api.CallChatApi;
import com.mogo.module.common.constants.DataTypes;
+import com.mogo.module.common.entity.CloudLocationInfo;
import com.mogo.module.common.entity.CloudRoadData;
import com.mogo.module.common.entity.MogoSnapshotSetData;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
@@ -203,10 +204,20 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
} else {
List< MogoLatLng > points = new ArrayList<>();
points.add( new MogoLatLng( lastPosition.getLat(), lastPosition.getLon() ) );
- points.add( new MogoLatLng( cloudRoadData.getLat(), cloudRoadData.getLon() ) );
+ if ( cloudRoadData.getCoordinates() != null && !cloudRoadData.getCoordinates().isEmpty() ) {
+ for ( CloudLocationInfo coordinate : cloudRoadData.getCoordinates() ) {
+ points.add( new MogoLatLng( coordinate.getLat(), coordinate.getLon() ) );
+ }
+ } else {
+ points.add( new MogoLatLng( cloudRoadData.getLat(), cloudRoadData.getLon() ) );
+ }
long interval = cloudRoadData.getSystemTime() - lastPosition.getSystemTime();
long interval2 = cloudRoadData.getSatelliteTime() - lastPosition.getSatelliteTime();
interval2 = interval < interval2 || interval2 == 0 ? interval : interval2;
+ if ( interval2 < 45 ) {
+ interval2 = 45;
+ }
+ interval2 -= 25;
marker.startSmoothInMs( points, interval2 );
Logger.d( TAG, "平滑移动 - %s duration = %s", uniqueKey, interval2 );
}
@@ -320,6 +331,7 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
.anchor( 0.5f, 0.5f )
.rotate( ( float ) data.getHeading() )
.object( data )
+ .controlAngle( true )
.position( new MogoLatLng( data.getLat(), data.getLon() ) );
if ( MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) {
options.set3DMode( true );
@@ -342,7 +354,7 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen
// return R.raw.bus;
case CloudRoadData.FROM_MY_LOCATION:
default:
- return R.raw.carred;
+ return R.raw.carblue;
}
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
index 323e91753e..dfd339f8eb 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
@@ -2,10 +2,8 @@ package com.mogo.module.common.entity;
import android.os.Parcel;
import android.os.Parcelable;
-import android.text.TextUtils;
import com.mogo.commons.debug.DebugConfig;
-import com.mogo.map.MogoLatLng;
import com.mogo.utils.CoordinateUtils;
import java.util.Objects;
@@ -43,14 +41,52 @@ public class CloudLocationInfo implements Parcelable {
this.speed = info.speed;
}
- public void convertCoor2GCJ02() {
- double[] amapCoord = CoordinateUtils.transformFromWGSToGCJ( lat, lon );
+ public void convertCoor2GCJ02(){
+ double[] amapCoord = CoordinateUtils.transformWgsToGcj( lat, lon );
if ( amapCoord != null ) {
- this.lat = amapCoord[0];
- this.lon = amapCoord[1];
+ this.lat = amapCoord[1];
+ this.lon = amapCoord[0];
}
}
+ protected CloudLocationInfo( Parcel in ) {
+ lat = in.readDouble();
+ lon = in.readDouble();
+ heading = in.readDouble();
+ systemTime = in.readLong();
+ satelliteTime = in.readLong();
+ alt = in.readDouble();
+ speed = in.readDouble();
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeDouble( lat );
+ dest.writeDouble( lon );
+ dest.writeDouble( heading );
+ dest.writeLong( systemTime );
+ dest.writeLong( satelliteTime );
+ dest.writeDouble( alt );
+ dest.writeDouble( speed );
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() {
+ @Override
+ public CloudLocationInfo createFromParcel( Parcel in ) {
+ return new CloudLocationInfo( in );
+ }
+
+ @Override
+ public CloudLocationInfo[] newArray( int size ) {
+ return new CloudLocationInfo[size];
+ }
+ };
+
public double getLat() {
return lat;
}
@@ -142,44 +178,4 @@ public class CloudLocationInfo implements Parcelable {
public int hashCode() {
return Objects.hash( lat, lon );
}
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel( Parcel dest, int flags ) {
- dest.writeDouble( this.lat );
- dest.writeDouble( this.lon );
- dest.writeDouble( this.heading );
- dest.writeLong( this.systemTime );
- dest.writeLong( this.satelliteTime );
- dest.writeDouble( this.alt );
- dest.writeDouble( this.speed );
- dest.writeInt( this.vehicleType );
- }
-
- protected CloudLocationInfo( Parcel in ) {
- this.lat = in.readDouble();
- this.lon = in.readDouble();
- this.heading = in.readDouble();
- this.systemTime = in.readLong();
- this.satelliteTime = in.readLong();
- this.alt = in.readDouble();
- this.speed = in.readDouble();
- this.vehicleType = in.readInt();
- }
-
- public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() {
- @Override
- public CloudLocationInfo createFromParcel( Parcel source ) {
- return new CloudLocationInfo( source );
- }
-
- @Override
- public CloudLocationInfo[] newArray( int size ) {
- return new CloudLocationInfo[size];
- }
- };
}
diff --git a/modules/mogo-module-common/src/main/res/raw/carblue.n3d b/modules/mogo-module-common/src/main/res/raw/carblue.n3d
new file mode 100644
index 0000000000..7c9212f7b0
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/raw/carblue.n3d differ
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
index 4070427fd0..f7d779f49d 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
@@ -50,6 +50,8 @@ import com.mogo.module.service.strategy.CarIconDisplayStrategy;
import com.mogo.module.service.ttsConfig.TtsConfigModleData;
import com.mogo.module.service.uploadintime.SnapshotUploadInTime;
import com.mogo.service.adas.IMogoADASController;
+import com.mogo.service.adas.IMogoAdasCarDataCallback;
+import com.mogo.service.adas.entity.ADASCarStateInfo;
import com.mogo.service.fragmentmanager.FragmentStackTransactionListener;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
@@ -65,6 +67,8 @@ import com.mogo.utils.NetworkUtils;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
+import org.json.JSONObject;
+
import java.util.List;
/**
@@ -86,6 +90,7 @@ public class MogoServices implements IMogoMapListener,
IMogoVoiceCmdCallBack,
FragmentStackTransactionListener,
IMogoCarLocationChangedListener2,
+ IMogoAdasCarDataCallback,
IDestroyable {
private boolean mInternalUnWakeupRegisterStatus = false;
@@ -370,6 +375,7 @@ public class MogoServices implements IMogoMapListener,
mIntentManager.registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, this );
mADASController = MarkerServiceHandler.getADASController();
+ mADASController.setAdasCarDataCallback( this );
mFragmentManager = MarkerServiceHandler.getFragmentManager();
mFragmentManager.addMainFragmentStackTransactionListener( this );
@@ -950,4 +956,25 @@ public class MogoServices implements IMogoMapListener,
}
}
}
+
+ @Override
+ public void onAdasCarDataCallback( ADASCarStateInfo stateInfo ) {
+ if ( stateInfo != null && stateInfo.getValues() != null ) {
+ JSONObject data = new JSONObject();
+ try {
+ data.putOpt( "lon", stateInfo.getValues().getLon() );
+ data.putOpt( "lat", stateInfo.getValues().getLat() );
+ data.putOpt( "alt", stateInfo.getValues().getAlt() );
+ data.putOpt( "speed", stateInfo.getValues().getGnss_speed() );
+ data.putOpt( "satelliteTime", stateInfo.getValues().getSatelliteTime() );
+ data.putOpt( "heading", stateInfo.getValues().getHeading() );
+ data.putOpt( "acceleration", stateInfo.getValues().getAcceleration() );
+ data.putOpt( "yawRate", stateInfo.getValues().getYaw_rate() );
+ MarkerServiceHandler.getApis().getMapServiceApi().getMapUIController().syncLocation2Map( data );
+ SnapshotUploadInTime.getInstance().syncAdasLocationInfo( data );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java
index d9b170fbf7..6d335d0afd 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java
@@ -9,6 +9,7 @@ import com.mogo.module.service.ServiceConst;
import com.mogo.module.service.carinfo.CarStateInfo;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.module.service.uploadintime.SnapshotUploadInTime;
+import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.utils.GsonUtil;
import org.json.JSONObject;
@@ -58,6 +59,7 @@ class ADASStatusIntentHandler implements IntentHandler {
if ( TextUtils.isEmpty( msg ) ) {
return;
}
+ Logger.d( "ADASCOOR", msg );
CarStateInfo stateInfo = GsonUtil.objectFromJson( msg, CarStateInfo.class );
if ( stateInfo != null && stateInfo.getValues() != null ) {
JSONObject data = new JSONObject();
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
index a8e754d753..b56f86dc19 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
@@ -27,6 +27,8 @@ import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.dialog.WMDialog;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.R;
+import com.mogo.module.service.uploadintime.SnapshotUploadInTime;
+import com.mogo.service.adas.entity.ADASCarStateInfo;
import com.mogo.service.entrance.ButtonIndex;
import com.mogo.utils.CoordinateUtils;
import com.mogo.utils.TipToast;
@@ -35,6 +37,11 @@ import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.utils.GsonUtil;
import com.mogo.utils.storage.SharedPrefsMgr;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
@@ -434,6 +441,7 @@ public class MockIntentHandler implements IntentHandler {
{40.20254135131836, 116.74005889892578},
{40.20252990722656, 116.74007415771484},
{40.20254898071289, 116.74008178710938},
+
{40.20254135131836, 116.74005889892578},
{40.20252227783203, 116.74006652832031},
{40.20254898071289, 116.74002838134766},
@@ -467,11 +475,75 @@ public class MockIntentHandler implements IntentHandler {
{40.20254135131836, 116.7392807006836}};
for ( double[] coor : coors ) {
double lat = coor[0], lon = coor[1];
- double[] translateCoor = CoordinateUtils.transformFromWGSToGCJ( lat, lon );
- double[] originCoor = CoordinateUtils.transformGcj02toWgs84( translateCoor[0], translateCoor[1] );
+ double[] translateCoor = CoordinateUtils.transformWgsToGcj( lat, lon );
+ double[] originCoor = CoordinateUtils.transformGcj02toWgs84( translateCoor[1], translateCoor[0] );
double delta = CoordinateUtils.calculateLineDistance( lon, lat, originCoor[0], originCoor[1] );
Logger.d( TAG, "偏差值:%s", delta );
}
+ break;
+ case 41:
+ // adb shell am broadcast -a com.mogo.mock --ei oper 41 --ei type 0 平滑移动
+ // adb shell am broadcast -a com.mogo.mock --ei oper 41 --ei type 1 直接打点
+ DebugConfig.setNotSmooth( intent.getIntExtra( "type", 0 ) == 1 );
+ break;
+ case 42:
+ WorkThreadHandler.getInstance().post( () -> {
+ try {
+ InputStream is = context.getAssets().open( "coors.json" );
+ BufferedReader br = new BufferedReader( new InputStreamReader( is ) );
+ String line = "";
+ List< ADASCarStateInfo > vals = new ArrayList<>();
+ while ( ( line = br.readLine() ) != null ) {
+ String[] json = line.split( " - " );
+ long time = Long.valueOf( json[0] );
+ ADASCarStateInfo si = GsonUtil.objectFromJson( json[1], ADASCarStateInfo.class );
+// si.getValues().setSatelliteTime( time + "" );
+ vals.add( si );
+ }
+ long interval = -1;
+ ADASCarStateInfo last = null;
+ for ( ADASCarStateInfo val : vals ) {
+ if ( last == null ) {
+ interval = 0;
+ } else {
+ interval = Long.valueOf( val.getValues().getSatelliteTime() ) - Long.valueOf( last.getValues().getSatelliteTime() );
+ }
+ last = val;
+ WorkThreadHandler.getInstance().postDelayed( () -> {
+ onAdasCarDataCallback( val );
+ }, interval );
+ }
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ } );
+ break;
+ case 43:
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getAdasControllerApi()
+ .onAutopilotArriveLike( intent.getIntExtra( "type", 8 ) );
+ break;
+ }
+ }
+
+ public void onAdasCarDataCallback( ADASCarStateInfo stateInfo ) {
+ if ( stateInfo != null && stateInfo.getValues() != null ) {
+ JSONObject data = new JSONObject();
+ try {
+ data.putOpt( "lon", stateInfo.getValues().getLon() );
+ data.putOpt( "lat", stateInfo.getValues().getLat() );
+ data.putOpt( "alt", stateInfo.getValues().getAlt() );
+ data.putOpt( "speed", stateInfo.getValues().getGnss_speed() );
+ data.putOpt( "satelliteTime", stateInfo.getValues().getSatelliteTime() );
+ data.putOpt( "heading", stateInfo.getValues().getHeading() );
+ data.putOpt( "acceleration", stateInfo.getValues().getAcceleration() );
+ data.putOpt( "yawRate", stateInfo.getValues().getYaw_rate() );
+ MarkerServiceHandler.getApis().getMapServiceApi().getMapUIController().syncLocation2Map( data );
+// SnapshotUploadInTime.getInstance().syncAdasLocationInfo( data );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/uploadintime/SnapshotUploadInTime.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/uploadintime/SnapshotUploadInTime.java
index 36e4b3cd1f..d89f01ebf5 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/uploadintime/SnapshotUploadInTime.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/uploadintime/SnapshotUploadInTime.java
@@ -92,13 +92,13 @@ class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener {
locationResult.lastCoordinate = lastInfo;
locationResult.mortonCode = MortonCode.wrapEncodeMorton( lastInfo.getLon(), lastInfo.getLat() );
}
-// locationResult.coordinates = new ArrayList<>();
+ locationResult.coordinates = new ArrayList<>();
locationResult.sn = com.mogo.commons.network.Utils.getSn();
-// if ( cloudLocationInfo == null ) {
-// locationResult.coordinates.addAll( new ArrayList<>() );
-// } else {
-// locationResult.coordinates.addAll( cloudLocationInfo );
-// }
+ if ( cloudLocationInfo == null || cloudLocationInfo.isEmpty() ) {
+ locationResult.coordinates.addAll( new ArrayList<>() );
+ } else {
+ locationResult.coordinates.addAll( cloudLocationInfo );
+ }
}
List< ADASRecognizedResult > recognizedResults = MarkerServiceHandler.getADASController().getLastADASRecognizedResult();
OnePerSecondSendContent content = new OnePerSecondSendContent();
diff --git a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml
index 461d5da465..abea40f5d9 100644
--- a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml
@@ -8,8 +8,8 @@
250px
250px
- 1490px
- 650px
+ 1525px
+ 695px
0px
0px
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java
index c2dd021a72..7872f39477 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java
@@ -293,10 +293,10 @@ public class V2XObuManager implements IObuCallback, Handler.Callback {
if (ObuConfig.useObuLocation) {
MogoLocation currentLocation = new MogoLocation();
- double coor[] = CoordinateUtils.transformFromWGSToGCJ(locationInfo.getLat(), locationInfo.getLon());
+ double coor[] = CoordinateUtils.transformWgsToGcj(locationInfo.getLat(), locationInfo.getLon());
- currentLocation.setLatitude(coor[0]);
- currentLocation.setLongitude(coor[1]);
+ currentLocation.setLatitude(coor[1]);
+ currentLocation.setLongitude(coor[0]);
currentLocation.setBearing(computeCarAngle(currentLocation));
V2XObuEventScenario.getInstance().updateLocation(currentLocation);
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
index 638bac5606..5e6f15a468 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
@@ -129,7 +129,16 @@ public interface IMogoADASController extends IProvider {
*/
void removeAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback );
+ /**
+ * 自车定位数据
+ *
+ * @param carDataCallback
+ */
+ void setAdasCarDataCallback( IMogoAdasCarDataCallback carDataCallback );
+
void addAdasOCHCallback( IMogoAdasOCHCallback callback );
void removeAdasOCHCallback();
+
+ void onAutopilotArriveLike( int type );
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasCarDataCallback.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasCarDataCallback.java
new file mode 100644
index 0000000000..cfdf4d9b20
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasCarDataCallback.java
@@ -0,0 +1,17 @@
+package com.mogo.service.adas;
+
+import com.mogo.service.adas.entity.ADASCarStateInfo;
+
+/**
+ * adas 自车位置数据回调
+ *
+ * @author tongchenfei
+ */
+public interface IMogoAdasCarDataCallback {
+ /**
+ * adas 数据回调
+ *
+ * @param msg 具体数据
+ */
+ void onAdasCarDataCallback( ADASCarStateInfo msg );
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASCarStateInfo.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASCarStateInfo.java
new file mode 100644
index 0000000000..e8ea32512d
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASCarStateInfo.java
@@ -0,0 +1,142 @@
+package com.mogo.service.adas.entity;
+
+import java.io.Serializable;
+
+/**
+ * @author nie yunlong
+ * @des 车辆状态
+ * @date 2020/3/12
+ */
+public class ADASCarStateInfo implements Serializable {
+
+
+ /**
+ * action : “state”
+ * values : {"lon":116.8,"lat":39.4,"alt":22.3,"heading":87.5,"acceleration":0.5,"yaw_rate":0.3}
+ */
+
+ private String action;
+ private ValuesBean values;
+
+ public String getAction() {
+ return action;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public ValuesBean getValues() {
+ return values;
+ }
+
+ public void setValues(ValuesBean values) {
+ this.values = values;
+ }
+
+ public static class ValuesBean {
+ /**
+ * lon : 116.8
+ * lat : 39.4
+ * alt : 22.3
+ * heading : 87.5
+ * acceleration : 0.5
+ * yaw_rate : 0.3
+ */
+
+ private double lon;
+ private double lat;
+ private double alt;
+ private double heading;
+ private double acceleration;
+ private double yaw_rate;
+ //惯导车速 m/s
+ private float gnss_speed;
+ //gps 时间
+ private String satelliteTime;
+
+ public float getGnss_speed() {
+ return gnss_speed;
+ }
+
+ public void setGnss_speed( float gnss_speed ) {
+ this.gnss_speed = gnss_speed;
+ }
+
+ public String getSatelliteTime() {
+ return satelliteTime;
+ }
+
+ public void setSatelliteTime( String satelliteTime ) {
+ this.satelliteTime = satelliteTime;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getAlt() {
+ return alt;
+ }
+
+ public void setAlt(double alt) {
+ this.alt = alt;
+ }
+
+ public double getHeading() {
+ return heading;
+ }
+
+ public void setHeading(double heading) {
+ this.heading = heading;
+ }
+
+ public double getAcceleration() {
+ return acceleration;
+ }
+
+ public void setAcceleration(double acceleration) {
+ this.acceleration = acceleration;
+ }
+
+ public double getYaw_rate() {
+ return yaw_rate;
+ }
+
+ public void setYaw_rate(double yaw_rate) {
+ this.yaw_rate = yaw_rate;
+ }
+
+ @Override
+ public String toString() {
+ return "ValuesBean{" +
+ "lon=" + lon +
+ ", lat=" + lat +
+ ", alt=" + alt +
+ ", heading=" + heading +
+ ", acceleration=" + acceleration +
+ ", yaw_rate=" + yaw_rate +
+ '}';
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "CarStateInfo{" +
+ "action='" + action + '\'' +
+ ", values=" + values +
+ '}';
+ }
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java
index 7196126e4b..7c5d8e06b4 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java
@@ -39,18 +39,10 @@ class ADASRecognizedListResult {
public double distanceY;
/**
- * 同一个uuid 1s内所对应的连续坐标
+ * 同一个uuid 1帧内所对应的坐标
*/
- public List< LatLon > latLonList;
+ public double lon;
+ public double lat;
- public static class LatLon {
-
- public LatLon( double lat, double lon ) {
- this.lat = lat;
- this.lon = lon;
- }
-
- public double lat;
- public double lon;
- }
+ public long systemTime;
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java
index 23dbe9b389..1329234417 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java
@@ -65,17 +65,17 @@ class AdasObjectUtils {
if ( rectBean == null ) {
return null;
}
- if( rectBean.getLat() < 1){
+ if ( rectBean.getLat() < 1 ) {
return null;
}
ADASRecognizedResult result = new ADASRecognizedResult();
result.uuid = rectBean.getUuid();
- double amapCoord[] = CoordinateUtils.transformFromWGSToGCJ( rectBean.getLat(), rectBean.getLon() );
+ double amapCoord[] = CoordinateUtils.transformWgsToGcj( rectBean.getLat(), rectBean.getLon() );
if ( amapCoord != null ) {
- result.lat = amapCoord[0];
- result.lon = amapCoord[1];
+ result.lat = amapCoord[1];
+ result.lon = amapCoord[0];
} else {
result.lat = rectBean.getLat();
result.lon = rectBean.getLon();
@@ -96,37 +96,33 @@ class AdasObjectUtils {
if ( datums == null || datums.isEmpty() ) {
return null;
}
- Map< String, ADASRecognizedListResult > result = new HashMap<>();
+ List< ADASRecognizedListResult > recognizedListResults = new ArrayList<>();
for ( RectInfo rectInfo : datums ) {
if ( rectInfo == null || rectInfo.getModels() == null || rectInfo.getModels().isEmpty() ) {
continue;
}
- List< RectInfo.RectBean > models = rectInfo.getModels();
- for ( RectInfo.RectBean model : models ) {
+ for ( RectInfo.RectBean model : rectInfo.getModels() ) {
if ( model == null || TextUtils.isEmpty( model.getUuid() ) ) {
continue;
}
- ADASRecognizedListResult recognizedListResult = null;
- if ( !result.containsKey( model.getUuid() ) ) {
- recognizedListResult = new ADASRecognizedListResult();
- recognizedListResult.latLonList = new ArrayList<>();
- recognizedListResult.heading = model.getHeading();
- recognizedListResult.speed = model.getSpeed();
- recognizedListResult.type = Integer.valueOf( model.getType() );
- recognizedListResult.uuid = model.getUuid();
- result.put( model.getUuid(), recognizedListResult );
- } else {
- recognizedListResult = result.get( model.getUuid() );
- recognizedListResult.distanceX = model.getDistance_x();
- recognizedListResult.distanceY = model.getDistance_y();
+ ADASRecognizedListResult recognizedListResult = new ADASRecognizedListResult();
+ recognizedListResult.heading = model.getHeading();
+ recognizedListResult.speed = model.getSpeed();
+ recognizedListResult.type = Integer.valueOf( model.getType() );
+ recognizedListResult.uuid = model.getUuid();
+ recognizedListResult.distanceX = model.getDistance_x();
+ recognizedListResult.distanceY = model.getDistance_y();
+ double amapCoord[] = CoordinateUtils.transformWgsToGcj( model.getLat(), model.getLon() );
+ recognizedListResult.lat = amapCoord[1];
+ recognizedListResult.lon = amapCoord[0];
+ try {
+ recognizedListResult.systemTime = Long.valueOf( model.getSystemTime() );
+ } catch ( Exception e ) {
+ recognizedListResult.systemTime = System.currentTimeMillis();
}
- double amapCoord[] = CoordinateUtils.transformFromWGSToGCJ( model.getLat(), model.getLon() );
- recognizedListResult.latLonList.add( new ADASRecognizedListResult.LatLon( amapCoord[0], amapCoord[1] ) );
+ recognizedListResults.add( recognizedListResult );
}
}
- if ( result.isEmpty() ) {
- return null;
- }
- return new ArrayList<>( result.values() );
+ return recognizedListResults;
}
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/LogWriter.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/LogWriter.java
new file mode 100644
index 0000000000..5f13ae7ed5
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/LogWriter.java
@@ -0,0 +1,75 @@
+package com.mogo.service.impl.adas;
+
+import android.os.Handler;
+import android.os.Message;
+
+import com.mogo.utils.WorkThreadHandler;
+import com.mogo.utils.network.utils.GsonUtil;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+public
+/**
+ * @author congtaowang
+ * @since 2021/1/22
+ *
+ * 描述
+ */
+class LogWriter {
+
+
+ public static final int MAX_SIZE = 6 * 1024 * 1924;
+
+ private final String path;
+ private Handler writeHandler = null;
+
+ public LogWriter( String path ) {
+ this.path = path;
+ File file = new File( path );
+ if ( !file.exists() ) {
+ try {
+ if ( !file.getParentFile().exists() ) {
+ file.getParentFile().mkdirs();
+ }
+ file.createNewFile();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ writeHandler = new Handler( WorkThreadHandler.newInstance( "Logger-Writer" ).getLooper() ) {
+ @Override
+ public void handleMessage( Message msg ) {
+ super.handleMessage( msg );
+ if ( msg.what == 100 ) {
+ writeImpl( ( ( String ) msg.obj ) );
+ }
+ }
+ };
+ }
+
+ private void writeImpl( Object log ) {
+ try {
+ FileWriter fw = new FileWriter( path, true );
+ fw.append( System.currentTimeMillis() + " - " );
+ if ( log instanceof CharSequence ) {
+ fw.append( ( ( CharSequence ) log ) );
+ } else {
+ fw.append( GsonUtil.jsonFromObject( log ) );
+ }
+ fw.append( "\n" );
+ fw.flush();
+ fw.close();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+
+ public void write( Object log ) {
+ Message msg = Message.obtain();
+ msg.obj = log;
+ msg.what = 100;
+ writeHandler.sendMessage( msg );
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
index ff303b9e07..f9e0556a24 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
@@ -20,11 +20,13 @@ import com.mogo.module.common.map.MyLocationUtil;
import com.mogo.module.common.utils.CarSeries;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
+import com.mogo.service.adas.IMogoAdasCarDataCallback;
import com.mogo.service.adas.IMogoAdasDataCallback;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.adas.IMogoAdasRecognizedDataCallback;
import com.mogo.service.adas.IMogoAdasWarnMessageCallback;
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
+import com.mogo.service.adas.entity.ADASCarStateInfo;
import com.mogo.service.adas.entity.ADASRecognizedListResult;
import com.mogo.service.adas.entity.ADASRecognizedResult;
import com.mogo.service.adas.entity.ADASWarnMessage;
@@ -46,6 +48,7 @@ import com.zhidao.autopilot.support.api.IAutopilotServiceStatusListener;
import com.zhidao.autopilot.support.api.IAutopolitDataCallBack;
import com.zhidao.autopilotservice.model.AdasAIDLAutopilotArriveModel;
import com.zhidao.support.adas.high.OnAdasListener;
+import com.zhidao.support.adas.high.bean.CarStateInfo;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import com.zhidao.support.adas.high.msg.MyMessageFactory;
@@ -53,8 +56,10 @@ import com.zhidao.support.adas.high.msg.MyMessageFactory;
import org.json.JSONException;
import org.json.JSONObject;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -108,15 +113,27 @@ public class MogoADASController implements IMogoADASController {
*/
private List< IMogoAdasRecognizedDataCallback > mMogoAdasRecognizedDataCallbacks = new CopyOnWriteArrayList<>();
+ private IMogoAdasCarDataCallback mMogoAdasCarDataCallback;
+
private RectInfo mLastFrameData;
private OnAdasListener mOnAdasListener = new OnAdasListenerAdapter() {
+ LogWriter logWriter = null;
+
@Override
public void onRectData( RectInfo rectInfo ) {
// 物体识别返回
Logger.d( TAG, "onRectData = %s", rectInfo.toString() );
+ if ( logWriter == null ) {
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddhhmmss" );
+ String date = sdf.format( new Date() );
+ String path = context.getExternalCacheDir().getAbsolutePath() + "/adaslog/" + date + "/log.txt";
+ Logger.d( TAG, path );
+ logWriter = new LogWriter( path );
+ }
mLastFrameData = rectInfo;
+ logWriter.write( GsonUtil.jsonFromObject( rectInfo ) );
// 仅在 vr 模式下显示 adas 识别车辆
if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) {
return;
@@ -315,6 +332,24 @@ public class MogoADASController implements IMogoADASController {
);
}
}
+
+ LogWriter logWriter;
+
+ @Override
+ public void ownerCarStateInfo( String ownerCarStateInfo ) {
+ if ( logWriter == null ) {
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddhhmmss" );
+ String date = sdf.format( new Date() );
+ String path = context.getExternalCacheDir().getAbsolutePath() + "/adaslog/" + date + "/ownerCarStateInfo.txt";
+ Logger.d( TAG, path );
+ logWriter = new LogWriter( path );
+ }
+ logWriter.write( ownerCarStateInfo );
+ ADASCarStateInfo stateInfo = GsonUtil.objectFromJson( ownerCarStateInfo, ADASCarStateInfo.class );
+ if ( mMogoAdasCarDataCallback != null ) {
+ mMogoAdasCarDataCallback.onAdasCarDataCallback( stateInfo );
+ }
+ }
};
AutopilotServiceManage.getInstance().registerAutopilotDataListener( mAutopolitDataCallBack );
}
@@ -595,6 +630,11 @@ public class MogoADASController implements IMogoADASController {
mMogoAdasRecognizedDataCallbacks.remove( callback );
}
+ @Override
+ public void setAdasCarDataCallback( IMogoAdasCarDataCallback carDataCallback ) {
+ mMogoAdasCarDataCallback = carDataCallback;
+ }
+
@Override
public void addAdasOCHCallback( IMogoAdasOCHCallback callback ) {
@@ -605,4 +645,15 @@ public class MogoADASController implements IMogoADASController {
public void removeAdasOCHCallback() {
mAdasOCHCallback = null;
}
+
+ @Override
+ public void onAutopilotArriveLike( int carType ) {
+ if ( mAdasOCHCallback != null ) {
+ mAdasOCHCallback.onArriveAt( new AdasOCHData(
+ carType,
+ 116.09888888,
+ 39.999999 )
+ );
+ }
+ }
}