]> gitweb.fperrin.net Git - GpsPrune.git/commitdiff
Fix computing moving time when some points are missing timestamps
authorFrédéric Perrin <fred@fperrin.net>
Tue, 15 Dec 2020 22:51:13 +0000 (22:51 +0000)
committerFrédéric Perrin <fred@fperrin.net>
Sat, 10 Apr 2021 20:29:12 +0000 (21:29 +0100)
src/tim/prune/data/RangeStats.java

index d8461c476b122a58561d215296b1fe7370aef74b..b32f12fa987344a04f2a419e8cb68e7cfd210975 100644 (file)
@@ -11,7 +11,7 @@ public class RangeStats
        private boolean _foundTrackPoint = false;
        protected AltitudeRange _totalAltitudeRange = new AltitudeRange();
        protected AltitudeRange _movingAltitudeRange = new AltitudeRange();
-       private Timestamp _earliestTimestamp = null, _latestTimestamp = null;
+       private Timestamp _earliestTimestamp = null, _latestTimestamp = null, _movingTimestamp = null;
        private long _movingMilliseconds = 0L;
        private boolean _timesIncomplete = false;
        private boolean _timesOutOfSequence = false;
@@ -75,6 +75,12 @@ public class RangeStats
                }
 
                // timestamps
+               if (inPoint.getSegmentStart())
+               {
+                       // reset movingTimestamp for moving time at the start
+                       // of each segment
+                       _movingTimestamp = null;
+               }
                if (inPoint.hasTimestamp())
                {
                        Timestamp currTstamp = inPoint.getTimestamp();
@@ -84,10 +90,11 @@ public class RangeStats
                        if (_latestTimestamp == null || currTstamp.isAfter(_latestTimestamp)) {
                                _latestTimestamp = currTstamp;
                        }
+
                        // Work out duration without segment gaps
-                       if (!inPoint.getSegmentStart() && _prevPoint != null && _prevPoint.hasTimestamp())
+                       if (_movingTimestamp != null)
                        {
-                               long millisLater = currTstamp.getMillisecondsSince(_prevPoint.getTimestamp());
+                               long millisLater = currTstamp.getMillisecondsSince(_movingTimestamp);
                                if (millisLater < 0) {
                                        _timesOutOfSequence = true;
                                }
@@ -95,6 +102,7 @@ public class RangeStats
                                        _movingMilliseconds += millisLater;
                                }
                        }
+                       _movingTimestamp = currTstamp;
                }
                else {
                        _timesIncomplete = true;