diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7abdbfc..54349e6 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -23,7 +23,6 @@
-
diff --git a/app/build.gradle b/app/build.gradle
index 264531f..102334d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,4 +49,5 @@ dependencies {
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
+ implementation project(path: ':modules:mogo-realtime')
}
\ No newline at end of file
diff --git a/app/src/main/java/com/mogo/cloud/RealTimeActivity.java b/app/src/main/java/com/mogo/cloud/RealTimeActivity.java
index ff3d378..ca5afa3 100644
--- a/app/src/main/java/com/mogo/cloud/RealTimeActivity.java
+++ b/app/src/main/java/com/mogo/cloud/RealTimeActivity.java
@@ -1,19 +1,57 @@
package com.mogo.cloud;
import android.os.Bundle;
+import android.widget.Button;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import com.mogo.cloud.passport.MoGoAiCloudClient;
+import com.mogo.realtime.core.SnapshotUploadInTime;
+import com.mogo.realtime.entity.MogoSnapshotSetData;
+import com.mogo.realtime.socket.IMogoCloudOnMsgListener;
+
+import java.nio.Buffer;
+
/**
* @author liujing
* @description 描述
* @since: 2021/1/21
*/
public class RealTimeActivity extends AppCompatActivity {
+
+ private Button snapshotStartButton;
+ private Button snapshotStopButton;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_real_time);
+ setConfig();
+
+ snapshotStartButton = findViewById(R.id.snapshotStart);
+ snapshotStartButton.setOnClickListener(view -> {
+ if (MoGoAiCloudClient.getInstance().getAiCloudClientConfig().isNeedUploadCoordinatesDurationInTime()) {
+ SnapshotUploadInTime.getInstance().start(getApplicationContext(), "com.mogo.launcher", new IMogoCloudOnMsgListener() {
+ @Override
+ public void onMsgReceived(MogoSnapshotSetData mogoSnapshotSetData) {
+
+ }
+ });
+ }
+ });
+
+ snapshotStopButton = findViewById(R.id.snapshotStart);
+ snapshotStopButton.setOnClickListener(view -> {
+ SnapshotUploadInTime.getInstance().stop();
+ });
+
}
+
+ private void setConfig() {
+ MoGoAiCloudClient.getInstance().getAiCloudClientConfig().setIsUseExternalLocation(false);
+ MoGoAiCloudClient.getInstance().getAiCloudClientConfig().setNeedUploadCoordinatesDurationInTime(true);
+
+ }
+
}
diff --git a/app/src/main/res/layout/activity_real_time.xml b/app/src/main/res/layout/activity_real_time.xml
index 90cd99f..66cbaa9 100644
--- a/app/src/main/res/layout/activity_real_time.xml
+++ b/app/src/main/res/layout/activity_real_time.xml
@@ -7,10 +7,17 @@
tools:context=".RealTimeActivity">
+ android:text="开启实时数据上传" />
+
+
\ No newline at end of file
diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java
index 5562a56..b0b4b61 100644
--- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java
+++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java
@@ -4,6 +4,7 @@ import com.mogo.realtime.Interface.RealTimeProvider;
import com.mogo.realtime.entity.ADASRecognizedResult;
import com.mogo.realtime.entity.CloudLocationInfo;
import com.mogo.realtime.socket.IMogoCloudOnMsgListener;
+import com.mogo.realtime.util.MogoLatLng;
import java.util.List;
@@ -63,4 +64,12 @@ public class RealTimeProviderImp implements RealTimeProvider {
return null;
}
+ @Override
+ public float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception {
+ if (mDelegate != null) {
+ mDelegate.calculateLineDistance(p1, p2);
+ }
+ return 0;
+ }
+
}
diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java
index 83626d0..95e7367 100644
--- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java
+++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java
@@ -3,6 +3,7 @@ package com.mogo.realtime.Interface;
import com.mogo.realtime.entity.ADASRecognizedResult;
import com.mogo.realtime.entity.CloudLocationInfo;
import com.mogo.realtime.socket.IMogoCloudOnMsgListener;
+import com.mogo.realtime.util.MogoLatLng;
import java.util.List;
@@ -34,4 +35,12 @@ public interface RealTimeProvider {
* 发送消息,由外部传入
*/
List getLocationMsg();
+ /**
+ * 计算两点之间的距离
+ *
+ * @param p1
+ * @param p2
+ * @return
+ */
+ float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception;
}
diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SimpleLocationCorrectStrategy.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SimpleLocationCorrectStrategy.java
index efb1280..dcf44b6 100644
--- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SimpleLocationCorrectStrategy.java
+++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SimpleLocationCorrectStrategy.java
@@ -2,7 +2,9 @@ package com.mogo.realtime.core;
import android.os.SystemClock;
+import com.mogo.realtime.Imp.RealTimeProviderImp;
import com.mogo.realtime.entity.CloudLocationInfo;
+import com.mogo.realtime.util.LocationParseUtil;
import com.mogo.realtime.util.MogoLatLng;
import com.mogo.utils.logger.Logger;
@@ -58,9 +60,10 @@ public class SimpleLocationCorrectStrategy {
try {
float targetDistance =
(float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION;
- float distance = 0;//SocketHandler.getInstance().getRealTimeProvider().getDistanceBetweenTwoPoints();
+ float distance = RealTimeProviderImp.getInstance().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info));
Logger.d(TAG,
"准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
+
if (distance <= targetDistance) {
// 新的定位点在目标距离范围内,认为此数据有效
lastLocation = info;
@@ -118,7 +121,7 @@ public class SimpleLocationCorrectStrategy {
try {
float targetDistance =
(float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION;
- float distance = 0;//SocketHandler.getInstance().getRealTimeProvider().getDistanceBetweenTwoPoints();
+ float distance = RealTimeProviderImp.getInstance().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info));
Logger.d(TAG,
"异常定位点\n准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
// 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同
diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/LocationParseUtil.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/LocationParseUtil.java
new file mode 100644
index 0000000..dd5473b
--- /dev/null
+++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/LocationParseUtil.java
@@ -0,0 +1,40 @@
+package com.mogo.realtime.util;
+
+import android.location.Location;
+
+import com.mogo.realtime.entity.CloudLocationInfo;
+
+/**
+ * 定位数据类型转换工具
+ *
+ * @author tongchenfei
+ */
+public class LocationParseUtil {
+ /**
+ * 从Location 转 CloudLocationInfo
+ *
+ * @param info 待转数据
+ * @return 转后数据
+ */
+ public static CloudLocationInfo locationToCloudLocation(Location info) {
+ if (info == null) {
+ return null;
+ }
+ CloudLocationInfo cloud = new CloudLocationInfo();
+ cloud.setLat(info.getLatitude());
+ cloud.setLon(info.getLongitude());
+ cloud.setAlt(info.getAltitude());
+ cloud.setHeading(info.getBearing());
+ cloud.setSpeed(info.getSpeed());
+ cloud.setSatelliteTime(info.getTime());
+ cloud.setSystemTime(System.currentTimeMillis());
+ return cloud;
+ }
+
+ public static MogoLatLng cloudLocationToMogoLatLng(CloudLocationInfo info) {
+ if (info == null) {
+ return null;
+ }
+ return new MogoLatLng(info.getLat(), info.getLon());
+ }
+}