]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/data/Distance.java
d12d98817d5c7fce86d687f12f566940a03dbbd7
[GpsPrune.git] / tim / prune / data / Distance.java
1 package tim.prune.data;
2
3 /**
4  * Class to provide distance constants and functions
5  */
6 public abstract class Distance
7 {
8         /** distance units */
9         public enum Units
10         {
11                 /** Kilometres */
12                 KILOMETRES,
13                 /** Miles */
14                 MILES,
15                 /** Metres */
16                 METRES,
17                 /** Feet */
18                 FEET
19         }
20
21         // Geographical constants
22         private static final double EARTH_RADIUS_KM = 6372.795;
23         // Conversion constants
24         private static final double CONVERT_KM_TO_MILES = 0.621371192;
25
26
27         /**
28          * Convert the given angle in radians into a distance
29          * @param inAngDist angular distance in radians
30          * @param inUnits desired units, eg miles or km
31          * @return distance in specified format
32          */
33         public static double convertRadiansToDistance(double inAngDist, Units inUnits)
34         {
35                 // Multiply by appropriate factor
36                 if (inUnits == Units.MILES)
37                         return inAngDist * EARTH_RADIUS_KM * CONVERT_KM_TO_MILES;
38                 else if (inUnits == Units.METRES)
39                         return inAngDist * EARTH_RADIUS_KM * 1000;
40                 // default kilometres
41                 return inAngDist * EARTH_RADIUS_KM;
42         }
43
44         /**
45          * Convert the given distance into an angle in radians
46          * @param inDist distance to convert
47          * @param inUnits units, eg miles or km
48          * @return angular distance in radians
49          */
50         public static double convertDistanceToRadians(double inDist, Units inUnits)
51         {
52                 // Divide by appropriate factor
53                 if (inUnits == Units.MILES)
54                         return inDist / EARTH_RADIUS_KM / CONVERT_KM_TO_MILES;
55                 else if (inUnits == Units.METRES)
56                         return inDist / EARTH_RADIUS_KM / 1000;
57                 // default kilometres
58                 return inDist / EARTH_RADIUS_KM;
59         }
60
61         /**
62          * Convert the given distance from metres to miles
63          * @param inMetres number of metres
64          * @return number of miles
65          */
66         public static double convertMetresToMiles(double inMetres)
67         {
68                 return inMetres / 1000.0 * CONVERT_KM_TO_MILES;
69         }
70 }