From 34b5f5c38b206e682732835ec35b4df589ad7af3 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 2 Jan 2012 15:52:04 +0100 Subject: [PATCH] getEstimatedPosition now returns null if no relevant fix is found --- .../impl/DynamicGPSFixMovingTrackImpl.java | 2 +- .../domain/tracking/impl/GPSFixTrackImpl.java | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicGPSFixMovingTrackImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicGPSFixMovingTrackImpl.java index 4a9262be32e..b6ee6d614c4 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicGPSFixMovingTrackImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicGPSFixMovingTrackImpl.java @@ -64,7 +64,7 @@ public class DynamicGPSFixMovingTrackImpl extends DynamicTrackImpl extends TrackImpl last = next; } } - SpeedWithBearing avgSpeed = new KnotSpeedWithBearingImpl(knotSum / count, bearingCluster.getAverage()); + SpeedWithBearing avgSpeed = count == 0 ? null : new KnotSpeedWithBearingImpl(knotSum / count, bearingCluster.getAverage()); return avgSpeed; } @@ -420,12 +420,20 @@ public class GPSFixTrackImpl extends TrackImpl @Override public boolean hasDirectionChange(TimePoint at, double minimumDegreeDifference) { + boolean result = false; TimePoint start = new MillisecondsTimePoint(at.asMillis()-getMillisecondsOverWhichToAverageSpeed()); TimePoint end = new MillisecondsTimePoint(at.asMillis()+getMillisecondsOverWhichToAverageSpeed()); - Bearing bearingAtStart = getEstimatedSpeed(start).getBearing(); - Bearing bearingAtEnd = getEstimatedSpeed(end).getBearing(); - // TODO also need to analyze the (smoothened) directions in between; example: two tacks within averaging interval - return Math.abs(bearingAtStart.getDifferenceTo(bearingAtEnd).getDegrees()) > minimumDegreeDifference; + SpeedWithBearing estimatedSpeedAtStart = getEstimatedSpeed(start); + if (estimatedSpeedAtStart != null) { + Bearing bearingAtStart = estimatedSpeedAtStart.getBearing(); + SpeedWithBearing estimatedSpeedAtEnd = getEstimatedSpeed(end); + if (estimatedSpeedAtEnd != null) { + Bearing bearingAtEnd = estimatedSpeedAtEnd.getBearing(); + // TODO also need to analyze the (smoothened) directions in between; example: two tacks within averaging interval + result = Math.abs(bearingAtStart.getDifferenceTo(bearingAtEnd).getDegrees()) > minimumDegreeDifference; + } + } + return result; } }