diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/map/MogoLocation.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/map/MogoLocation.java index 03a70a4bbc..33c4fb5091 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/map/MogoLocation.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/map/MogoLocation.java @@ -324,6 +324,50 @@ public class MogoLocation implements Cloneable { return this; } + public MogoLocation copy(MogoLocation lastLocation, double longitude, double latitude) { + MogoLocation mogoLocation = new MogoLocation(); + mogoLocation.accuracy = lastLocation.accuracy; + mogoLocation.adCode = lastLocation.adCode; + mogoLocation.address = lastLocation.address; + mogoLocation.aoiName = lastLocation.aoiName; + mogoLocation.buildingId = lastLocation.buildingId; + mogoLocation.cityCode = lastLocation.cityCode; + mogoLocation.cityName = lastLocation.cityName; + mogoLocation.description = lastLocation.description; + mogoLocation.district = lastLocation.district; + mogoLocation.errorCode = lastLocation.errorCode; + mogoLocation.errorInfo = lastLocation.errorInfo; + mogoLocation.floor = lastLocation.floor; + mogoLocation.gpsAccuracyStatus = lastLocation.gpsAccuracyStatus; + mogoLocation.lastReceiveTime = lastLocation.lastReceiveTime; + mogoLocation.locationDetail = lastLocation.locationDetail; + mogoLocation.locType = lastLocation.locType; + mogoLocation.poiName = lastLocation.poiName; + mogoLocation.provider = lastLocation.provider; + mogoLocation.province = lastLocation.province; + mogoLocation.satellite = lastLocation.satellite; + mogoLocation.street = lastLocation.street; + mogoLocation.streetNum = lastLocation.streetNum; + + MessagePad.GnssInfo gnssInfo = + MessagePad.GnssInfo.newBuilder() + .setLongitude(longitude) //经度 + .setLatitude(latitude)//纬度 + .setAltitude(lastLocation.gnssInfo.getAltitude()) //海拔 + .setHeading(lastLocation.gnssInfo.getHeading()) //航向角 + .setAcceleration(lastLocation.gnssInfo.getAcceleration()) //加速度 + .setYawRate(lastLocation.gnssInfo.getYawRate()) //曲率 + .setGnssSpeed(lastLocation.gnssInfo.getGnssSpeed()) //惯导车速 m/s + .setVehicleSpeed(lastLocation.gnssInfo.getVehicleSpeed()) //车辆车速 m/s + .setSatelliteTime(lastLocation.gnssInfo.getSatelliteTime()) //gps时间 单位:秒s + .setSystemTime(lastLocation.gnssInfo.getSystemTime()) //系统时间 单位:秒s + .build(); + + mogoLocation.gnssInfo = gnssInfo; + return mogoLocation; + } + + public long getLastReceiveTime() { return lastReceiveTime; } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationGCJ02ListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationGCJ02ListenerManager.kt index 4b62d2a1bf..00240c86bf 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationGCJ02ListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationGCJ02ListenerManager.kt @@ -19,7 +19,7 @@ object CallerChassisLocationGCJ02ListenerManager : CallerBaseGCJ02 坐标 val gcj20Location = CoordinateTransform.WGS84ToGCJ02(gnssInfo.longitude, gnssInfo.latitude) - mGnssInfo?.let { - mGnssInfo!!.longitude = gcj20Location[0] - mGnssInfo!!.latitude = gcj20Location[1] + // 克隆定位数据,防止原数据被篡改导致位置跳变 + mGnssInfo = gnssInfo.copy(gnssInfo, gcj20Location[0], gcj20Location[1]) - M_LISTENERS.forEach { - val tag = it.key - // 获取数据监听需要的HZ - val hz = M_LISTENERS_HZ[tag] - if (hz != null && hz > 0) { - val hzTime = (1.0 / hz.toDouble()) * 1000 - // 获取最后一次回调的时间 - val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag] - if (hzLastSendTime != null && hzLastSendTime > 0) { - // 计算是否进入下一次回调周期 - val nowTime = TimeUtils.getNowMills() - if (nowTime - hzLastSendTime > hzTime) { - syncLocationCallback(tag, it, mGnssInfo!!, sourceType) - } - } else { - syncLocationCallback(tag, it, mGnssInfo!!, sourceType) + M_LISTENERS.forEach { + val tag = it.key + // 获取数据监听需要的HZ + val hz = M_LISTENERS_HZ[tag] + if (hz != null && hz > 0) { + val hzTime = (1.0 / hz.toDouble()) * 1000 + // 获取最后一次回调的时间 + val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag] + if (hzLastSendTime != null && hzLastSendTime > 0) { + // 计算是否进入下一次回调周期 + val nowTime = TimeUtils.getNowMills() + if (nowTime - hzLastSendTime > hzTime) { + syncLocationCallback(tag, it, mGnssInfo, sourceType) } } else { - //Logger.d(TAG, "没设置监听频率,使用默认5HZ") - val hzTime = (1.0 / 5) * 1000 - // 获取最后一次回调的时间 - val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag] - if (hzLastSendTime != null && hzLastSendTime > 0) { - // 计算是否进入下一次回调周期 - val nowTime = TimeUtils.getNowMills() - if (nowTime - hzLastSendTime > hzTime) { - syncLocationCallback(tag, it, mGnssInfo!!, sourceType) - } - } else { - syncLocationCallback(tag, it, mGnssInfo!!, sourceType) + syncLocationCallback(tag, it, mGnssInfo, sourceType) + } + } else { + //Logger.d(TAG, "没设置监听频率,使用默认5HZ") + val hzTime = (1.0 / 5) * 1000 + // 获取最后一次回调的时间 + val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag] + if (hzLastSendTime != null && hzLastSendTime > 0) { + // 计算是否进入下一次回调周期 + val nowTime = TimeUtils.getNowMills() + if (nowTime - hzLastSendTime > hzTime) { + syncLocationCallback(tag, it, mGnssInfo, sourceType) } + } else { + syncLocationCallback(tag, it, mGnssInfo, sourceType) } } } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt index 7c38e0fad2..6c2465f0d9 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt @@ -17,7 +17,7 @@ object CallerChassisLocationWGS84ListenerManager : CallerBase 0) { ArrayList points = stopLine.points; if (carLoc != null) { - /** - * //地图组提供的高德坐标切到WGS84坐标系 - * var cal = LonLatPoint(point!!.lon, point!!.lat) - * if(!point!!.provider.equals(MapAutoApi.GPS_FLAG)){ - * cal = MapTools.switchLonLatWGS84(cal) - * } - */ - String provider = carLoc.getProvider(); - //CallerLogger.INSTANCE.d(M_MAP + TAG, "car_loc: " + carLoc + ""); - if (!MapAutoApi.GPS_FLAG.equals(provider)) { - //CallerLogger.INSTANCE.d(M_MAP + TAG, "convert before: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}"); - LonLatPoint p = new LonLatPoint(carLoc.getLongitude(), carLoc.getLatitude()); - p = MapTools.INSTANCE.switchLonLatWGS84(p); - carLoc.setLongitude(p.longitude); - carLoc.setLatitude(p.latitude); - //CallerLogger.INSTANCE.d(M_MAP + TAG, "convert after: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}"); - } - //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}"); +// //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}"); MapRoadInfo.StopLine stopInfo = convert(stopLine); LonLatPoint p1 = points.get(0); LonLatPoint p2 = points.get(points.size() - 1);