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