X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FSelection.java;h=c07c1a91e3aea422e5b469bef027afe4b2db3247;hb=54b9d8bc8f0025ccf97a67d9dd217ef1f9cf082f;hp=cdbe58ecca33035a7a012d5ee5e3be402e422ccc;hpb=ca9bdb3916f9c39adbbf95d06ac95c21dafbb4e6;p=GpsPrune.git diff --git a/tim/prune/data/Selection.java b/tim/prune/data/Selection.java index cdbe58e..c07c1a9 100644 --- a/tim/prune/data/Selection.java +++ b/tim/prune/data/Selection.java @@ -16,9 +16,9 @@ public class Selection private int _currentPhotoIndex = -1; private IntegerRange _altitudeRange = null; private int _climb = -1, _descent = -1; - private int _altitudeFormat = Altitude.FORMAT_NONE; - private long _seconds = 0L; - private double _angDistance = -1.0; //, _averageSpeed = -1.0; + private Altitude.Format _altitudeFormat = Altitude.Format.NO_FORMAT; + private long _totalSeconds = 0L, _movingSeconds = 0L; + private double _angDistance = -1.0, _angMovingDistance = -1.0; /** @@ -109,7 +109,7 @@ public class Selection */ private void recalculate() { - _altitudeFormat = Altitude.FORMAT_NONE; + _altitudeFormat = Altitude.Format.NO_FORMAT; if (_track.getNumPoints() > 0 && hasRangeSelected()) { _altitudeRange = new IntegerRange(); @@ -117,8 +117,10 @@ public class Selection _descent = 0; Altitude altitude = null; Timestamp time = null, startTime = null, endTime = null; + Timestamp previousTime = null; DataPoint lastPoint = null, currPoint = null; - _angDistance = 0.0; + _angDistance = 0.0; _angMovingDistance = 0.0; + _totalSeconds = 0L; _movingSeconds = 0L; int altValue = 0; int lastAltValue = 0; boolean foundAlt = false; @@ -130,7 +132,7 @@ public class Selection if (!currPoint.isWaypoint() && altitude.isValid()) { altValue = altitude.getValue(_altitudeFormat); - if (_altitudeFormat == Altitude.FORMAT_NONE) + if (_altitudeFormat == Altitude.Format.NO_FORMAT) _altitudeFormat = altitude.getFormat(); _altitudeRange.addValue(altValue); if (foundAlt) @@ -147,26 +149,30 @@ public class Selection time = currPoint.getTimestamp(); if (time.isValid()) { - if (startTime == null) startTime = time; - endTime = time; + if (startTime == null || startTime.isAfter(time)) startTime = time; + if (endTime == null || time.isAfter(endTime)) endTime = time; + // add moving time + if (!currPoint.getSegmentStart() && previousTime != null && time.isAfter(previousTime)) { + _movingSeconds += time.getSecondsSince(previousTime); + } + previousTime = time; } // Calculate distances, again ignoring waypoints if (!currPoint.isWaypoint()) { if (lastPoint != null) { - _angDistance += DataPoint.calculateRadiansBetween(lastPoint, currPoint); + double radians = DataPoint.calculateRadiansBetween(lastPoint, currPoint); + _angDistance += radians; + if (!currPoint.getSegmentStart()) { + _angMovingDistance += radians; + } } lastPoint = currPoint; } } - if (endTime != null) - { - _seconds = endTime.getSecondsSince(startTime); - } - else - { - _seconds = 0L; + if (endTime != null) { + _totalSeconds = endTime.getSecondsSince(startTime); } } _valid = true; @@ -196,7 +202,7 @@ public class Selection /** * @return the altitude format, ie feet or metres */ - public int getAltitudeFormat() + public Altitude.Format getAltitudeFormat() { return _altitudeFormat; } @@ -236,19 +242,35 @@ public class Selection public long getNumSeconds() { if (!_valid) recalculate(); - return _seconds; + return _totalSeconds; } + /** + * @return number of seconds spanned by segments within selection + */ + public long getMovingSeconds() + { + if (!_valid) recalculate(); + return _movingSeconds; + } /** * @param inUnits distance units to use, from class Distance * @return distance of Selection in specified units */ - public double getDistance(int inUnits) + public double getDistance(Distance.Units inUnits) { return Distance.convertRadiansToDistance(_angDistance, inUnits); } + /** + * @param inUnits distance units to use, from class Distance + * @return moving distance of Selection in specified units + */ + public double getMovingDistance(Distance.Units inUnits) + { + return Distance.convertRadiansToDistance(_angMovingDistance, inUnits); + } /** * Clear selected point and range