TrackRecordingManager: store GPS-based TrackPoints based upon the distance to the previously stored GPS-based TrackPoint.

This commit is contained in:
Dennis Guse
2022-01-09 22:14:10 +01:00
parent d691c958b9
commit e508c53ca9
4 changed files with 19 additions and 18 deletions
@@ -324,6 +324,11 @@ public class TrackPoint {
if (hasSensorDistance()) {
return getSensorDistance();
}
return distanceToPreviousFromLocation(previous);
}
@NonNull
public Distance distanceToPreviousFromLocation(@NonNull TrackPoint previous) {
if (!hasLocation() || hasLocation() != previous.hasLocation()) {
throw new RuntimeException("Cannot compute distance.");
}
@@ -171,12 +171,14 @@ class TrackRecordingManager {
Log.d(TAG, "Ignoring TrackPoint as it has no distance.");
return false;
}
TrackPoint distanceTo = lastStoredTrackPoint;
Distance distanceToLastStoredTrackPoint;
if (trackPoint.hasLocation() && !lastStoredTrackPoint.hasLocation()) {
distanceTo = lastStoredTrackPointWithLocation;
distanceToLastStoredTrackPoint = trackPoint.distanceToPreviousFromLocation(lastStoredTrackPointWithLocation);
} else {
distanceToLastStoredTrackPoint = trackPoint.distanceToPrevious(lastStoredTrackPoint);
}
Distance distanceToLastStoredTrackPoint = trackPoint.distanceToPrevious(distanceTo);
if (distanceToLastStoredTrackPoint.greaterThan(maxRecordingDistance)) {
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(trackPoint);