X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FAltitude.java;h=78a98e04f93fba650517cc79201c8d322c379fa6;hb=52bf9e8686c916be37a26a0b75340393d4478b05;hp=54a3f68eb862416791840dcfcb84009a5d191499;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b;p=GpsPrune.git diff --git a/tim/prune/data/Altitude.java b/tim/prune/data/Altitude.java index 54a3f68..78a98e0 100644 --- a/tim/prune/data/Altitude.java +++ b/tim/prune/data/Altitude.java @@ -8,16 +8,25 @@ public class Altitude private boolean _valid = false; private int _value = 0; private int _format = -1; + private String _stringValue = null; + + /** Altitude formats */ public static final int FORMAT_NONE = -1; public static final int FORMAT_METRES = 0; public static final int FORMAT_FEET = 1; + /** Constants for conversion */ private static final double CONVERT_FEET_TO_METRES = 0.3048; private static final double CONVERT_METRES_TO_FEET = 3.28084; + /** Constant for no altitude value */ + public static final Altitude NONE = new Altitude(null, FORMAT_NONE); + /** - * Constructor + * Constructor using String + * @param inString string to parse + * @param inFormat format of altitude, either metres or feet */ public Altitude(String inString, int inFormat) { @@ -25,6 +34,7 @@ public class Altitude { try { + _stringValue = inString; _value = (int) Double.parseDouble(inString.trim()); _format = inFormat; _valid = true; @@ -35,7 +45,9 @@ public class Altitude /** - * Constructor + * Constructor with int vaue + * @param inValue int value of altitude + * @param inFormat format of altitude, either metres or feet */ public Altitude(int inValue, int inFormat) { @@ -79,7 +91,7 @@ public class Altitude */ public int getValue(int inFormat) { - // TODO: Fix rounding errors here converting between units - return double? + // Note possible rounding errors here if converting to/from units if (inFormat == _format) return _value; if (inFormat == FORMAT_METRES) @@ -89,6 +101,19 @@ public class Altitude return _value; } + /** + * Get a string version of the value + * @param inFormat specified format + * @return string value, if possible the original one + */ + public String getStringValue(int inFormat) + { + if (inFormat == _format && _stringValue != null && !_stringValue.equals("")) { + return _stringValue; + } + return "" + getValue(inFormat); + } + /** * Interpolate a new Altitude object between the given ones @@ -99,6 +124,19 @@ public class Altitude * @return Interpolated Altitude object */ public static Altitude interpolate(Altitude inStart, Altitude inEnd, int inIndex, int inNumSteps) + { + return interpolate(inStart, inEnd, 1.0 * (inIndex + 1) / (inNumSteps + 1)); + } + + + /** + * Interpolate a new Altitude object between the given ones + * @param inStart start altitude + * @param inEnd end altitude + * @param inFrac fraction of distance from first point + * @return Interpolated Altitude object + */ + public static Altitude interpolate(Altitude inStart, Altitude inEnd, double inFrac) { // Check if altitudes are valid if (inStart == null || inEnd == null || !inStart.isValid() || !inEnd.isValid()) @@ -107,8 +145,8 @@ public class Altitude int altFormat = inStart.getFormat(); int startValue = inStart.getValue(); int endValue = inEnd.getValue(altFormat); - int newValue = startValue - + (int) ((endValue - startValue) * 1.0 / (inNumSteps + 1) * (inIndex + 1)); + // interpolate between start and end + int newValue = startValue + (int) ((endValue - startValue) * inFrac); return new Altitude(newValue, altFormat); } }