X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FSpeedCalculator.java;h=e80e21498e6b3ffa04e3b30b3a959854a5d2563b;hb=a6197ddcaac11c0b943183da7d46169742d024af;hp=d83a7bd306ff9f72aa480f2ce0619ce0f5239dbb;hpb=4d5796d02a15808311c09448d79e6e7d1de9d636;p=GpsPrune.git diff --git a/tim/prune/data/SpeedCalculator.java b/tim/prune/data/SpeedCalculator.java index d83a7bd..e80e214 100644 --- a/tim/prune/data/SpeedCalculator.java +++ b/tim/prune/data/SpeedCalculator.java @@ -9,18 +9,19 @@ import tim.prune.config.Config; public abstract class SpeedCalculator { /** - * Calculate the speed value of the track at the specified index + * Calculate the horizontal speed value of the track at the specified index * @param inTrack track object * @param inIndex index of point to calculate speed for * @param inValue object in which to place result of calculation */ public static void calculateSpeed(Track inTrack, int inIndex, SpeedValue inValue) { - if (inTrack == null || inIndex < 0 || inValue == null) { + inValue.setInvalid(); + if (inTrack == null || inIndex < 0 || inValue == null) + { System.err.println("Cannot calculate speed for index " + inIndex); return; } - inValue.setInvalid(); DataPoint point = inTrack.getPoint(inIndex); if (point == null) {return;} @@ -28,13 +29,10 @@ public abstract class SpeedCalculator double speedValue = 0.0; // First, see if point has a speed value already - // FIXME: How do we know what units this speed is in? m/s or mph or km/h or what? - String speedStr = point.getFieldValue(Field.SPEED); - try { - speedValue = Double.parseDouble(speedStr); + if (point.hasHSpeed()) { + speedValue = point.getHSpeed().getValue(Config.getUnitSet().getSpeedUnit()); pointHasSpeed = true; } - catch (Exception e) {} // ignore, leave pointHasSpeed false // otherwise, see if we can calculate it from the timestamps if (!pointHasSpeed && point.hasTimestamp() && !point.isWaypoint()) @@ -127,15 +125,10 @@ public abstract class SpeedCalculator double speedValue = 0.0; // First, see if point has a speed value already - if (point != null) + if (point != null && point.hasVSpeed()) { - // FIXME: Can we assume m/s or ft/s? - String speedStr = point.getFieldValue(Field.VERTICAL_SPEED); - try { - speedValue = Double.parseDouble(speedStr); - pointHasSpeed = true; - } - catch (Exception e) {} // ignore, leave pointHasSpeed false + speedValue = point.getVSpeed().getValue(Config.getUnitSet().getVerticalSpeedUnit()); + pointHasSpeed = true; } // otherwise, see if we can calculate it from the heights and timestamps if (!pointHasSpeed