]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/Distance.java
Version 14, October 2012
[GpsPrune.git] / tim / prune / data / Distance.java
index d12d98817d5c7fce86d687f12f566940a03dbbd7..83864a59e890216548957711513ae188c5ba8571 100644 (file)
@@ -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();
        }
 }