X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FDistance.java;h=83864a59e890216548957711513ae188c5ba8571;hp=d12d98817d5c7fce86d687f12f566940a03dbbd7;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hpb=f1b92378a792131ac8fb33a869405851d5b2d1f7 diff --git a/tim/prune/data/Distance.java b/tim/prune/data/Distance.java index d12d988..83864a5 100644 --- a/tim/prune/data/Distance.java +++ b/tim/prune/data/Distance.java @@ -1,70 +1,58 @@ package tim.prune.data; +import tim.prune.config.Config; + /** * Class to provide distance constants and functions */ public abstract class Distance { - /** distance units */ - public enum Units - { - /** Kilometres */ - KILOMETRES, - /** Miles */ - MILES, - /** Metres */ - METRES, - /** Feet */ - FEET - } - // Geographical constants - private static final double EARTH_RADIUS_KM = 6372.795; - // Conversion constants - private static final double CONVERT_KM_TO_MILES = 0.621371192; + /** Earth radius in metres */ + private static final double EARTH_RADIUS_M = 6372795.0; /** * Convert the given angle in radians into a distance * @param inAngDist angular distance in radians - * @param inUnits desired units, eg miles or km - * @return distance in specified format + * @return distance in currently configured distance units */ - public static double convertRadiansToDistance(double inAngDist, Units inUnits) + public static double convertRadiansToDistance(double inAngDist) + { + return convertRadiansToDistance(inAngDist, Config.getUnitSet().getDistanceUnit()); + } + + /** + * Convert the given angle in radians into a distance + * @param inAngDist angular distance in radians + * @param inUnit distance units + * @return distance in specified distance units + */ + public static double convertRadiansToDistance(double inAngDist, Unit inUnit) { // Multiply by appropriate factor - if (inUnits == Units.MILES) - return inAngDist * EARTH_RADIUS_KM * CONVERT_KM_TO_MILES; - else if (inUnits == Units.METRES) - return inAngDist * EARTH_RADIUS_KM * 1000; - // default kilometres - return inAngDist * EARTH_RADIUS_KM; + return inAngDist * EARTH_RADIUS_M * inUnit.getMultFactorFromStd(); } /** * Convert the given distance into an angle in radians - * @param inDist distance to convert - * @param inUnits units, eg miles or km + * @param inDist distance to convert in the current distance units * @return angular distance in radians */ - public static double convertDistanceToRadians(double inDist, Units inUnits) + public static double convertDistanceToRadians(double inDist) { - // Divide by appropriate factor - if (inUnits == Units.MILES) - return inDist / EARTH_RADIUS_KM / CONVERT_KM_TO_MILES; - else if (inUnits == Units.METRES) - return inDist / EARTH_RADIUS_KM / 1000; - // default kilometres - return inDist / EARTH_RADIUS_KM; + return convertDistanceToRadians(inDist, Config.getUnitSet().getDistanceUnit()); } /** - * Convert the given distance from metres to miles - * @param inMetres number of metres - * @return number of miles + * Convert the given distance into an angle in radians + * @param inDist distance to convert in the current distance units + * @param inUnit distance unit + * @return angular distance in radians */ - public static double convertMetresToMiles(double inMetres) + public static double convertDistanceToRadians(double inDist, Unit inUnit) { - return inMetres / 1000.0 * CONVERT_KM_TO_MILES; + // Divide by appropriate factor + return inDist / EARTH_RADIUS_M / inUnit.getMultFactorFromStd(); } }