]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/Distance.java
Version 4, January 2008
[GpsPrune.git] / tim / prune / data / Distance.java
index 5425873102aa752833c9953c91e967705d0ad75b..311cd886a5af098d8764478d4e5aa1d313b08f44 100644 (file)
@@ -8,27 +8,45 @@ public abstract class Distance
        // distance formats
        public static final int UNITS_KILOMETRES = 1;
        public static final int UNITS_MILES      = 2;
+       public static final int UNITS_METRES     = 3;
 
        // Geographical constants
        private static final double EARTH_RADIUS_KM = 6372.795;
-       private static final double EARTH_RADIUS_MILES = 3959.8712255;
        // Conversion constants
-       //private static final double CONVERT_KM_TO_MILES = 1.609344;
-       //private static final double CONVERT_MILES_TO_KM = 0.621371192;
+       private static final double CONVERT_KM_TO_MILES = 0.621371192;
 
 
        /**
         * Convert the given angle in radians into a distance
         * @param inAngDist angular distance in radians
-        * @param inUnits desired units, miles or km
+        * @param inUnits desired units, eg miles or km
         * @return distance in specified format
         */
-       public static double convertRadians(double inAngDist, int inUnits)
+       public static double convertRadiansToDistance(double inAngDist, int inUnits)
        {
                // Multiply by appropriate factor
                if (inUnits == UNITS_MILES)
-                       return inAngDist * EARTH_RADIUS_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;
        }
 
+       /**
+        * Convert the given distance into an angle in radians
+        * @param inDist distance to convert
+        * @param inUnits units, eg miles or km
+        * @return angular distance in radians
+        */
+       public static double convertDistanceToRadians(double inDist, int inUnits)
+       {
+               // 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;
+       }
 }