Added intervals in StatisticsRecordedFragment with distance, speed and pace for all activity types.

Users can select the length of the interval (in a spinner with several options).
The intervals will be in km or mi depending on settings.
This commit is contained in:
Román
2020-08-10 19:16:23 +02:00
committed by Román Martínez
parent 19e35a7609
commit 7a923a947e
10 changed files with 482 additions and 1 deletions
@@ -0,0 +1,67 @@
package de.dennisguse.opentracks.viewmodels;
import java.util.ArrayList;
import java.util.List;
import de.dennisguse.opentracks.content.data.TrackPoint;
import de.dennisguse.opentracks.util.LocationUtils;
import de.dennisguse.opentracks.util.UnitConversions;
public class IntervalStatistics {
List<Interval> intervalList;
public IntervalStatistics() {
intervalList = new ArrayList<>();
}
public void build(List<TrackPoint> trackPointList, float distanceInterval) {
intervalList = new ArrayList<>();
if (trackPointList == null || trackPointList.size() == 0) {
return;
}
Interval interval = new Interval();
for (int i = 1; i < trackPointList.size(); i++) {
TrackPoint prevTrackPoint = trackPointList.get(i - 1);
TrackPoint trackPoint = trackPointList.get(i);
if (LocationUtils.isValidLocation(trackPoint.getLocation()) && LocationUtils.isValidLocation(prevTrackPoint.getLocation())) {
interval.distance += prevTrackPoint.distanceTo(trackPoint);
interval.time += trackPoint.getTime() - prevTrackPoint.getTime();
if (interval.distance >= distanceInterval) {
intervalList.add(interval);
interval = new Interval();
}
}
}
if (interval.distance > 1f) {
intervalList.add(interval);
}
}
public List<Interval> getIntervalList() {
return intervalList;
}
public static class Interval {
float distance = 0f;
float time = 0f;
public float getDistance() {
return distance;
}
/**
* @return speed of the interval in m/s.
*/
public float getSpeed() {
if (distance == 0f) {
return 0f;
}
return distance / (float) (time * UnitConversions.MS_TO_S);
}
}
}