1 package tim.prune.data;
4 * Class to hold an altitude and provide conversion functions
8 private boolean _valid = false;
9 private int _value = 0;
10 private int _format = -1;
11 public static final int FORMAT_NONE = -1;
12 public static final int FORMAT_METRES = 0;
13 public static final int FORMAT_FEET = 1;
15 private static final double CONVERT_FEET_TO_METRES = 0.3048;
16 private static final double CONVERT_METRES_TO_FEET = 3.28084;
20 * Constructor using String
21 * @param inString string to parse
22 * @param inFormat format of altitude, either metres or feet
24 public Altitude(String inString, int inFormat)
26 if (inString != null && !inString.equals(""))
30 _value = (int) Double.parseDouble(inString.trim());
34 catch (NumberFormatException nfe) {}
40 * Constructor with int vaue
41 * @param inValue int value of altitude
42 * @param inFormat format of altitude, either metres or feet
44 public Altitude(int inValue, int inFormat)
53 * @return true if the value could be parsed
55 public boolean isValid()
62 * @return raw value as int
71 * @return format of number
73 public int getFormat()
80 * Get the altitude value in the specified format
81 * @param inFormat desired format, either FORMAT_METRES or FORMAT_FEET
82 * @return value as an int
84 public int getValue(int inFormat)
86 // TODO: Fix rounding errors here converting between units - return double?
87 if (inFormat == _format)
89 if (inFormat == FORMAT_METRES)
90 return (int) (_value * CONVERT_FEET_TO_METRES);
91 if (inFormat == FORMAT_FEET)
92 return (int) (_value * CONVERT_METRES_TO_FEET);
98 * Interpolate a new Altitude object between the given ones
99 * @param inStart start altitude
100 * @param inEnd end altitude
101 * @param inIndex index of interpolated point
102 * @param inNumSteps number of steps to interpolate
103 * @return Interpolated Altitude object
105 public static Altitude interpolate(Altitude inStart, Altitude inEnd, int inIndex, int inNumSteps)
107 return interpolate(inStart, inEnd, 1.0 * (inIndex + 1) / (inNumSteps + 1));
112 * Interpolate a new Altitude object between the given ones
113 * @param inStart start altitude
114 * @param inEnd end altitude
115 * @param inFrac fraction of distance from first point
116 * @return Interpolated Altitude object
118 public static Altitude interpolate(Altitude inStart, Altitude inEnd, double inFrac)
120 // Check if altitudes are valid
121 if (inStart == null || inEnd == null || !inStart.isValid() || !inEnd.isValid())
122 return new Altitude(null, FORMAT_NONE);
123 // Use altitude format of first point
124 int altFormat = inStart.getFormat();
125 int startValue = inStart.getValue();
126 int endValue = inEnd.getValue(altFormat);
127 // interpolate between start and end
128 int newValue = startValue + (int) ((endValue - startValue) * inFrac);
129 return new Altitude(newValue, altFormat);