This commit is contained in:
zhongchao
2021-01-26 17:43:05 +08:00
8 changed files with 111 additions and 5 deletions

1
.idea/gradle.xml generated
View File

@@ -23,7 +23,6 @@
</set> </set>
</option> </option>
<option name="resolveModulePerSourceSet" value="false" /> <option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

View File

@@ -49,4 +49,5 @@ dependencies {
implementation rootProject.ext.dependencies.rxjava implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid implementation rootProject.ext.dependencies.rxandroid
implementation project(path: ':modules:mogo-realtime')
} }

View File

@@ -1,19 +1,57 @@
package com.mogo.cloud; package com.mogo.cloud;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Button;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; 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 * @author liujing
* @description 描述 * @description 描述
* @since: 2021/1/21 * @since: 2021/1/21
*/ */
public class RealTimeActivity extends AppCompatActivity { public class RealTimeActivity extends AppCompatActivity {
private Button snapshotStartButton;
private Button snapshotStopButton;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_real_time); 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);
}
} }

View File

@@ -7,10 +7,17 @@
tools:context=".RealTimeActivity"> tools:context=".RealTimeActivity">
<Button <Button
android:id="@+id/snapshot" android:id="@+id/snapshotStart"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:text="实时定位 数据上传" /> android:text="开启实时数据上传" />
<Button
android:id="@+id/snapshotStop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="开启实时数据上传" />
</LinearLayout> </LinearLayout>

View File

@@ -4,6 +4,7 @@ import com.mogo.realtime.Interface.RealTimeProvider;
import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.realtime.entity.ADASRecognizedResult;
import com.mogo.realtime.entity.CloudLocationInfo; import com.mogo.realtime.entity.CloudLocationInfo;
import com.mogo.realtime.socket.IMogoCloudOnMsgListener; import com.mogo.realtime.socket.IMogoCloudOnMsgListener;
import com.mogo.realtime.util.MogoLatLng;
import java.util.List; import java.util.List;
@@ -63,4 +64,12 @@ public class RealTimeProviderImp implements RealTimeProvider {
return null; return null;
} }
@Override
public float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception {
if (mDelegate != null) {
mDelegate.calculateLineDistance(p1, p2);
}
return 0;
}
} }

View File

@@ -3,6 +3,7 @@ package com.mogo.realtime.Interface;
import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.realtime.entity.ADASRecognizedResult;
import com.mogo.realtime.entity.CloudLocationInfo; import com.mogo.realtime.entity.CloudLocationInfo;
import com.mogo.realtime.socket.IMogoCloudOnMsgListener; import com.mogo.realtime.socket.IMogoCloudOnMsgListener;
import com.mogo.realtime.util.MogoLatLng;
import java.util.List; import java.util.List;
@@ -34,4 +35,12 @@ public interface RealTimeProvider {
* 发送消息,由外部传入 * 发送消息,由外部传入
*/ */
List<CloudLocationInfo> getLocationMsg(); List<CloudLocationInfo> getLocationMsg();
/**
* 计算两点之间的距离
*
* @param p1
* @param p2
* @return
*/
float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception;
} }

View File

@@ -2,7 +2,9 @@ package com.mogo.realtime.core;
import android.os.SystemClock; import android.os.SystemClock;
import com.mogo.realtime.Imp.RealTimeProviderImp;
import com.mogo.realtime.entity.CloudLocationInfo; import com.mogo.realtime.entity.CloudLocationInfo;
import com.mogo.realtime.util.LocationParseUtil;
import com.mogo.realtime.util.MogoLatLng; import com.mogo.realtime.util.MogoLatLng;
import com.mogo.utils.logger.Logger; import com.mogo.utils.logger.Logger;
@@ -58,9 +60,10 @@ public class SimpleLocationCorrectStrategy {
try { try {
float targetDistance = float targetDistance =
(float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION; (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, Logger.d(TAG,
"准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}"); "准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
if (distance <= targetDistance) { if (distance <= targetDistance) {
// 新的定位点在目标距离范围内,认为此数据有效 // 新的定位点在目标距离范围内,认为此数据有效
lastLocation = info; lastLocation = info;
@@ -118,7 +121,7 @@ public class SimpleLocationCorrectStrategy {
try { try {
float targetDistance = float targetDistance =
(float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION; (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, Logger.d(TAG,
"异常定位点\n准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}"); "异常定位点\n准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
// 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同 // 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同

View File

@@ -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());
}
}