Speed: use Distance for conversions.

This commit is contained in:
Dennis Guse
2022-07-01 16:57:06 +02:00
parent 807ac3fc9f
commit 11d912d14d
2 changed files with 11 additions and 21 deletions
@@ -85,16 +85,23 @@ public class Speed {
return speed_mps; 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() { public double toKMH() {
return speed_mps * UnitConversions.MPS_TO_KMH; return toH().toKM();
} }
public double toMPH() { public double toMPH() {
return toKMH() * UnitConversions.KM_TO_MI; return toH().toMI();
} }
public double toKnots() { public double toKnots() {
return toKMH() * UnitConversions.KM_TO_NAUTICAL_MILE; return toH().toNauticalMiles();
} }
public Duration toPace(UnitSystem unitSystem) { public Duration toPace(UnitSystem unitSystem) {
@@ -102,20 +109,7 @@ public class Speed {
return Duration.ofSeconds(0); return Duration.ofSeconds(0);
} }
double distance = speed_mps; double distance = Distance.of(speed_mps).toKM_Miles(unitSystem);
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");
}
return Duration.ofSeconds(Math.round(1 / distance)); return Duration.ofSeconds(Math.round(1 / distance));
} }
@@ -15,8 +15,6 @@
*/ */
package de.dennisguse.opentracks.data.models; package de.dennisguse.opentracks.data.models;
import java.time.Duration;
/** /**
* Unit conversion constants. * Unit conversion constants.
* *
@@ -41,8 +39,6 @@ public class UnitConversions {
public static final double NAUTICAL_MILE_TO_M = 1852.0; 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 M_TO_NAUTICAL_MILE = 1 / NAUTICAL_MILE_TO_M;
public static final double KM_TO_NAUTICAL_MILE = 1000 * M_TO_NAUTICAL_MILE; 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 // multiplication factor to convert miles to km
public static final double MI_TO_KM = 1 / KM_TO_MI; public static final double MI_TO_KM = 1 / KM_TO_MI;
// multiplication factor to convert miles to m // multiplication factor to convert miles to m