1 package tim.prune.gui.profile;
3 import tim.prune.I18nManager;
4 import tim.prune.data.DataPoint;
5 import tim.prune.data.Track;
6 import tim.prune.data.UnitSet;
9 * Class to provide a source of altitude data for the profile chart
11 public class AltitudeData extends ProfileData
15 * @param inTrack track object
17 public AltitudeData(Track inTrack) {
22 * Get the data and populate the instance arrays
24 public void init(UnitSet inUnitSet)
26 setUnitSet(inUnitSet);
29 // multiplication factor for unit conversion
30 final double multFactor = _unitSet.getAltitudeUnit().getMultFactorFromStd();
35 for (int i=0; i<_track.getNumPoints(); i++)
37 DataPoint point = _track.getPoint(i);
38 if (point != null && point.hasAltitude())
40 // Point has an altitude - store value and maintain max and min values
41 double value = point.getAltitude().getMetricValue() * multFactor;
42 _pointValues[i] = value;
43 if (value < _minValue || !_hasData) {_minValue = value;}
44 if (value > _maxValue || !_hasData) {_maxValue = value;}
46 // if all values are zero then that's no data
47 _hasData = _hasData || (point.getAltitude().getValue() != 0);
48 _pointHasData[i] = true;
50 else _pointHasData[i] = false;
53 catch (ArrayIndexOutOfBoundsException obe)
54 {} // must be due to the track size changing during calculation
55 // assume that a redraw will be triggered
60 * @return text description including units
62 public String getLabel()
64 return I18nManager.getText("fieldname.altitude") + " ("
65 + I18nManager.getText(_unitSet.getAltitudeUnit().getShortnameKey())
70 * @return key for message when no altitudes present
72 public String getNoDataKey() {
73 return "display.noaltitudes";