From caf4cc8b1b667c84837599431858223fa42abdb7 Mon Sep 17 00:00:00 2001 From: liujing Date: Tue, 26 Jan 2021 16:44:32 +0800 Subject: [PATCH] =?UTF-8?q?[add]=20=E5=8A=A0=E4=B8=A4=E7=82=B9=E9=97=B4?= =?UTF-8?q?=E8=B7=9D=E8=AE=A1=E7=AE=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../realtime/Imp/RealTimeProviderImp.java | 9 +++++ .../realtime/Interface/RealTimeProvider.java | 9 +++++ .../core/SimpleLocationCorrectStrategy.java | 7 +++- .../mogo/realtime/util/LocationParseUtil.java | 40 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/util/LocationParseUtil.java 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()); + } +}