diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java index a8635d6e3..7d2ee73ff 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java @@ -85,16 +85,23 @@ public class Speed { return speed_mps; } + /** + * We interpret {@link Speed} here as a {@link Distance} over 1h. + */ + private Distance toH() { + return Distance.of(speed_mps * Duration.ofHours(1).toSeconds()); + } + public double toKMH() { - return speed_mps * UnitConversions.MPS_TO_KMH; + return toH().toKM(); } public double toMPH() { - return toKMH() * UnitConversions.KM_TO_MI; + return toH().toMI(); } public double toKnots() { - return toKMH() * UnitConversions.KM_TO_NAUTICAL_MILE; + return toH().toNauticalMiles(); } public Duration toPace(UnitSystem unitSystem) { @@ -102,20 +109,7 @@ public class Speed { return Duration.ofSeconds(0); } - double distance = speed_mps; - switch (unitSystem) { //TODO Can we use to(UnitSystem)? - case METRIC: - distance *= UnitConversions.M_TO_KM; - break; - case IMPERIAL: - distance *= UnitConversions.M_TO_MI; - break; - case NAUTICAL_IMPERIAL: - distance *= UnitConversions.M_TO_NAUTICAL_MILE; - break; - default: - throw new RuntimeException("Not implemented"); - } + double distance = Distance.of(speed_mps).toKM_Miles(unitSystem); return Duration.ofSeconds(Math.round(1 / distance)); } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/UnitConversions.java b/src/main/java/de/dennisguse/opentracks/data/models/UnitConversions.java index 7c877224d..ea6b570db 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/UnitConversions.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/UnitConversions.java @@ -15,8 +15,6 @@ */ package de.dennisguse.opentracks.data.models; -import java.time.Duration; - /** * Unit conversion constants. * @@ -41,8 +39,6 @@ public class UnitConversions { public static final double NAUTICAL_MILE_TO_M = 1852.0; public static final double M_TO_NAUTICAL_MILE = 1 / NAUTICAL_MILE_TO_M; public static final double KM_TO_NAUTICAL_MILE = 1000 * M_TO_NAUTICAL_MILE; - // multiplication factor to convert meters per second to kilometers per hour - public static final double MPS_TO_KMH = M_TO_KM / (1d / Duration.ofHours(1).toSeconds()); // multiplication factor to convert miles to km public static final double MI_TO_KM = 1 / KM_TO_MI; // multiplication factor to convert miles to m