GPS Sport Sniffer is a open source GPS application developed with Qt and made in...
[gpssportsniffer] / track.h
1 #ifndef TRACK_H
2 #define TRACK_H
3
4 #include <QList>
5 #include <QDateTime>
6 #include <QTime>
7 #include "constants.h"
8
9 class QXmlStreamWriter;
10 class GpsPoint;
11 class QXmlStreamReader;
12
13
14 class Summarized{
15
16 protected:
17
18     int numPoints;
19     double minLatitude;
20     double maxLatitude;
21     double minLongitude;
22     double maxLongitude;
23     int gpsInterval;
24     QDateTime startTime;
25     QDateTime endTime;
26     double duration;
27     double distance;
28     qreal avgSpeed;
29     qreal maxSpeed;
30     qreal elevationGain;
31     qreal elevationLoss;
32     qreal minElevation;
33     qreal maxElevation;
34     qreal avgPace;
35     qreal bestPace;
36
37 public:
38
39     explicit Summarized();
40     //virtual ~Summarized();
41
42     /*
43     inline double getDuration(){return duration;}
44     inline double getDistance(){return distance;}
45     inline qreal getAvgSpeed(){return avgSpeed;}
46     inline qreal getMaxSpeed(){return maxSpeed;}
47     inline qreal getElevationGain(){return elevationGain;}
48     inline qreal getElevationLoss(){return elevationLoss;}
49     inline qreal getMinElevation(){return minElevation;}
50     inline qreal getMaxElevation(){return maxelevation;}
51     inline qreal getAvgPace(){return avgPace;}
52     inline qreal getBestPace(){return bestPace;}
53     */
54
55     void addSummary(Summarized summary);
56     Summarized& account(GpsPoint point);
57     Summarized& account(GpsPoint first, GpsPoint last);
58
59     inline int getNumPoints(){return numPoints;}
60     inline void setNumPoints(int p){numPoints=p;}
61
62     inline double getMinLatitude(){return minLatitude;}
63     inline void setMinLatitude(double latitude){minLatitude=latitude;}
64
65     inline double getMaxLatitude(){return maxLatitude;}
66     inline void setMaxLatitude(double latitude){maxLatitude=latitude;}
67
68     inline double getMinLongitude(){return minLongitude;}
69     inline void setMinLongitude(double longitude){minLongitude=longitude;}
70
71     inline double getMaxLongitude(){return maxLongitude;}
72     inline void setMaxLongitude(double longitude){maxLongitude=longitude;}
73
74     inline int getGpsInterval(){return gpsInterval;}
75     inline void setGpsInterval(int interval){gpsInterval=interval;}
76
77     inline QDateTime getStartTime(){return startTime;}
78     inline void setStartTime(QDateTime time){startTime=time;}
79
80     inline QDateTime getEndTime(){return endTime;}
81     inline void setEndTime(QDateTime time){endTime=time;}
82
83     inline double getDuration(){return duration;}
84     inline void setDuration(double duration_p){duration=duration_p;}
85
86     inline double getDistance(){return distance;}
87     inline void setDistance(double distance_p){distance=distance_p;}
88
89     inline int getAvgSpeed(){return avgSpeed;}
90     inline void setAvgSpeed(int speed){avgSpeed=speed;}
91
92     inline int getMaxSpeed(){return maxSpeed;}
93     inline void setMaxSpeed(int speed){maxSpeed=speed;}
94
95     inline int getElevationGain(){return elevationGain;}
96     inline void setElevationGain(int elevation){elevationGain=elevation;}
97
98     inline int getElevationLoss(){return elevationLoss;}
99     inline void setElevationLoss(int elevation){elevationLoss=elevation;}
100
101     inline int getMinElevation(){return minElevation;}
102     inline void setMinElevation(int elevation){minElevation=elevation;}
103
104     inline int getMaxElevation(){return maxElevation;}
105     inline void setMaxElevation(int elevation){maxElevation=elevation;}
106
107     inline int getAvgPace(){return avgPace;}
108     inline void setAvgPace(int time){avgPace=time;}
109
110     inline int getBestPace(){return bestPace;}
111     inline void setBestPace(int time){bestPace=time;}
112     QString toSumString();
113 };
114
115
116 class GpsPoint{
117
118 private:
119     double latitude;
120     double longitude;
121     double elevation;
122
123     QDateTime time;
124     qreal speed;
125     qreal direction;
126     qreal magneticVariation;
127     qreal horizontalAccuracy;
128     qreal verticalAccuracy;
129     qreal distancePrev;
130     QTime timeToPrev;
131 public:
132     explicit GpsPoint(double latitude, double longitude, int elevation);
133     explicit GpsPoint(double latitude, double longitude, int elevation,QDateTime time, qreal speed,
134                       qreal direction, qreal magneticVariation,qreal horizontalAccuracy, qreal verticalAccuracy);
135     explicit GpsPoint(double latitude, double longitude, int elevation,QDateTime time, qreal speed,
136                       qreal direction, qreal magneticVariation,qreal horizontalAccuracy, qreal verticalAccuracy, qreal distancePrev, QTime timeToPrev);
137
138     //virtual ~GpsPoint();
139
140     inline double getLatitude(){return latitude;}
141     inline void setLatitude(double lat){latitude=lat;}
142
143     inline double getLongitude(){return longitude;}
144     inline void setLongitude(double longitude_p){longitude=longitude_p;}
145
146     inline double getElevation(){return elevation;}
147     inline void setElevation(double elevation_p){elevation=elevation_p;}
148
149     inline QDateTime getTime(){return time;}
150     inline void setTime(QDateTime time_p){time=time_p;}
151
152     inline qreal getSpeed(){return speed;}
153     inline void setSpeed(qreal speed_p){speed=speed_p;}
154
155     inline qreal getDirection(){return direction;}
156     inline void setDirection(qreal direction_p){direction=direction_p;}
157
158     inline qreal getMagneticVariation(){return magneticVariation;}
159     inline void setMagneticVariation(qreal magneticVariation_p){magneticVariation=magneticVariation_p;}
160
161     inline qreal getHorizontalAccuracy(){return horizontalAccuracy;}
162     inline void setHorizontalAccuracy(qreal horizontalAccuracy_p){horizontalAccuracy=horizontalAccuracy_p;}
163
164     inline qreal getVerticalAccuracy(){return verticalAccuracy;}
165     inline void setVerticalAccuracy(qreal verticalAccuracy_p){verticalAccuracy=verticalAccuracy_p;}
166
167     inline double getDistancePrev(){return distancePrev;}
168     inline void setDistancePrev(double distance){distancePrev=distance;}
169
170     QString toString();
171
172     GpsPoint& operator= (const GpsPoint&);
173
174     friend int operator== (const GpsPoint&, const GpsPoint&);
175     friend int operator!= (const GpsPoint&, const GpsPoint&);
176     friend QDataStream& operator<< (QDataStream&, const GpsPoint&);
177
178     double distance(GpsPoint p);
179
180 };
181
182 class Lap: public Summarized{
183
184 private:
185     int number;
186     QList<GpsPoint*> points;
187
188 public:
189
190     explicit Lap(int number);
191     virtual ~Lap();
192
193     inline int getNumber(){return number;}
194     inline void setNumber(int number_p){number=number_p;}
195
196     Summarized* addPoint(GpsPoint* point);
197     inline QList<GpsPoint*> getPoints(){return points;}
198     QString toString();
199
200 };
201
202 class Activity: public Summarized{
203
204 private:
205     QString sport;
206     int numLaps;
207     QDateTime id;
208     QList<Lap*> laps;
209
210 public:
211
212     explicit Activity(QString sport);
213     virtual ~Activity();
214
215     inline QDateTime getId(){return id;}
216     inline void setId(QDateTime time){id=time;}
217
218     inline QString getSport(){return sport;}
219     inline void setSport(QString sport_p){sport=sport_p;}
220
221     inline int getNumLaps(){return numLaps;}
222     inline void setNumLaps(int laps){numLaps=laps;}
223
224     void addLap();
225     Summarized* addPoint(GpsPoint* point);
226
227     inline QList<Lap*> getLaps(){return laps;}
228     QString toString();
229 };
230
231
232 class Track:public Summarized
233 {
234
235 private:
236
237     QString fileName;
238     QString name;
239     int numActivities;
240     QList<Activity*> activities;
241
242     double minLat;
243     double minLong;
244     double maxLat;
245     double maxLong;
246
247
248     void writeTCXCourses(QXmlStreamWriter* xmlWriter);
249     void writeTCXCourse(QXmlStreamWriter* xmlWriter, Activity* act);
250     void writeTCXLap(QXmlStreamWriter* xmlWriter, Lap* lap);
251     void writeTCXPoint(QXmlStreamWriter* xmlWriter, GpsPoint* point);
252     void writeGPXTracks(QXmlStreamWriter* xmlWriter);
253     void writeGPXTrack(QXmlStreamWriter* xmlWriter, Activity* act);
254     void writeGPXPoint(QXmlStreamWriter* xmlWriter, GpsPoint* point);
255     void writeGPXTrkseg(QXmlStreamWriter* xmlWriter, Lap* lap);
256
257
258 public:
259
260     explicit Track(QString fileName,QString name);
261     explicit Track();
262     virtual ~Track();
263
264     bool readFromXML(QString fileName);
265     GpsPoint* parseGpsPoint(QXmlStreamReader& xml);
266     QList<GpsPoint*> getGpsPoints();
267     inline QString getFileName(){return fileName;}
268     inline void setFileName(QString file){fileName=file;}
269
270     inline QString getName(){return name;}
271     inline void setName(QString n){name=n;}
272     inline void setName(const char* n){name=n;}
273     inline int getNumActivities(){return numActivities;}
274     inline void setNumActivites(int activities){numActivities=activities;}
275
276     void addActivity(QString sport);
277     void addLap();
278     Summarized* addPoint(GpsPoint* point);
279     QString toString();
280
281     bool saveToXML();
282
283 };
284
285 #endif // TRACK_H