]> gitweb.fperrin.net Git - GpsPrune.git/blob - src/tim/prune/gui/profile/AltitudeData.java
9600b1674ade17a296a9e43f9a1dc4039dfcffe1
[GpsPrune.git] / src / tim / prune / gui / profile / AltitudeData.java
1 package tim.prune.gui.profile;
2
3 import tim.prune.I18nManager;
4 import tim.prune.data.DataPoint;
5 import tim.prune.data.Track;
6 import tim.prune.data.UnitSet;
7
8 /**
9  * Class to provide a source of altitude data for the profile chart
10  */
11 public class AltitudeData extends ProfileData
12 {
13         /**
14          * Constructor
15          * @param inTrack track object
16          */
17         public AltitudeData(Track inTrack) {
18                 super(inTrack);
19         }
20
21         /**
22          * Get the data and populate the instance arrays
23          */
24         public void init(UnitSet inUnitSet)
25         {
26                 setUnitSet(inUnitSet);
27                 initArrays();
28                 _hasData = false;
29                 // multiplication factor for unit conversion
30                 final double multFactor = _unitSet.getAltitudeUnit().getMultFactorFromStd();
31                 if (_track != null)
32                 {
33                         try
34                         {
35                                 for (int i=0; i<_track.getNumPoints(); i++)
36                                 {
37                                         DataPoint point = _track.getPoint(i);
38                                         if (point != null && point.hasAltitude())
39                                         {
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;}
45
46                                                 // if all values are zero then that's no data
47                                                 _hasData = _hasData || (point.getAltitude().getValue() != 0);
48                                                 _pointHasData[i] = true;
49                                         }
50                                         else _pointHasData[i] = false;
51                                 }
52                         }
53                         catch (ArrayIndexOutOfBoundsException obe)
54                         {} // must be due to the track size changing during calculation
55                            // assume that a redraw will be triggered
56                 }
57         }
58
59         /**
60          * @return text description including units
61          */
62         public String getLabel()
63         {
64                 return I18nManager.getText("fieldname.altitude") + " ("
65                         + I18nManager.getText(_unitSet.getAltitudeUnit().getShortnameKey())
66                         + ")";
67         }
68
69         /**
70          * @return key for message when no altitudes present
71          */
72         public String getNoDataKey() {
73                 return "display.noaltitudes";
74         }
75 }