package cgeo.geocaching.location;
import cgeo.geocaching.settings.Settings;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.Locale;
public class Units {
private Units() {
// utility class
}
public static ImmutablePair<Double, String> scaleDistance(final double distanceKilometers) {
if (Settings.useImperialUnits()) {
final double distanceMiles = distanceKilometers / IConversion.MILES_TO_KILOMETER;
if (distanceMiles >= 0.1) {
return new ImmutablePair<>(distanceMiles, "mi");
}
return new ImmutablePair<>(distanceMiles * 5280, "ft");
} else if (distanceKilometers >= 1) {
return new ImmutablePair<>(distanceKilometers, "km");
} else {
return new ImmutablePair<>(distanceKilometers * 1000, "m");
}
}
public static String getDistanceFromKilometers(final Float distanceKilometers) {
if (distanceKilometers == null) {
return "?";
}
final ImmutablePair<Double, String> scaled = scaleDistance(distanceKilometers);
final String formatString;
if (scaled.left >= 100) {
formatString = "%.0f %s";
} else if (scaled.left >= 10) {
formatString = "%.1f %s";
} else {
formatString = "%.2f %s";
}
return String.format(formatString, scaled.left, scaled.right);
}
public static String getDistanceFromMeters(final float meters) {
return getDistanceFromKilometers(meters / 1000f);
}
public static String getSpeed(final float kilometersPerHour) {
if (Settings.useImperialUnits()) {
return String.format(Locale.US, "%.0f mph", kilometersPerHour / IConversion.MILES_TO_KILOMETER);
}
return String.format(Locale.US, "%.0f km/h", kilometersPerHour);
}
}