1 /****************************************************************************
3 ** Copyright (C) 2011 Tito Eritja Real <jtitoo@gmail.com>
5 ** This program is free software: you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation, either version 3 of the License, or
8 ** (at your option) any later version.
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program. If not, see <http://www.gnu.org/licenses/>.
18 ****************************************************************************/
26 #include "constants.h"
28 class QXmlStreamWriter;
30 class QXmlStreamReader;
54 double lastElevationAccuracy;
60 explicit Summarized();
61 //virtual ~Summarized();
64 inline double getDuration(){return duration;}
65 inline double getDistance(){return distance;}
66 inline double getAvgSpeed(){return avgSpeed;}
67 inline double getMaxSpeed(){return maxSpeed;}
68 inline double getElevationGain(){return elevationGain;}
69 inline double getElevationLoss(){return elevationLoss;}
70 inline double getMinElevation(){return minElevation;}
71 inline double getMaxElevation(){return maxelevation;}
72 inline double getAvgPace(){return avgPace;}
73 inline double getBestPace(){return bestPace;}
76 void addSummary(Summarized summary);
77 Summarized& account(GpsPoint point);
78 Summarized& account(GpsPoint first, GpsPoint last);
80 inline int getNumPoints(){return numPoints;}
81 inline void setNumPoints(int p){numPoints=p;}
83 inline double getMinLatitude(){return minLatitude;}
84 inline void setMinLatitude(double latitude){minLatitude=latitude;}
86 inline double getMaxLatitude(){return maxLatitude;}
87 inline void setMaxLatitude(double latitude){maxLatitude=latitude;}
89 inline double getMinLongitude(){return minLongitude;}
90 inline void setMinLongitude(double longitude){minLongitude=longitude;}
92 inline double getMaxLongitude(){return maxLongitude;}
93 inline void setMaxLongitude(double longitude){maxLongitude=longitude;}
95 inline int getGpsInterval(){return gpsInterval;}
96 inline void setGpsInterval(int interval){gpsInterval=interval;}
98 inline QDateTime getStartTime(){return startTime;}
99 inline void setStartTime(QDateTime time){startTime=time;}
101 inline QDateTime getEndTime(){return endTime;}
102 inline void setEndTime(QDateTime time){endTime=time;}
104 inline double getDuration(){return duration;}
105 inline void setDuration(double duration_p){duration=duration_p;}
107 inline double getDistance(){return distance;}
108 inline void setDistance(double distance_p){distance=distance_p;}
110 inline int getAvgSpeed(){return avgSpeed;}
111 inline void setAvgSpeed(int speed){avgSpeed=speed;}
113 inline int getMaxSpeed(){return maxSpeed;}
114 inline void setMaxSpeed(int speed){maxSpeed=speed;}
116 inline double getElevationGain(){return elevationGain;}
117 inline void setElevationGain(double elevation){elevationGain=elevation;}
119 inline double getElevationLoss(){return elevationLoss;}
120 inline void setElevationLoss(double elevation){elevationLoss=elevation;}
122 inline double getMinElevation(){return minElevation;}
123 inline void setMinElevation(double elevation){minElevation=elevation;}
125 inline double getMaxElevation(){return maxElevation;}
126 inline void setMaxElevation(double elevation){maxElevation=elevation;}
128 inline double getLastElevation(){return lastElevation;}
129 inline void setLastElevation(double elevation){lastElevation=elevation;}
131 inline double getLastElevationAccuracy(){return lastElevationAccuracy;}
132 inline void setLastElevationAccuracy(double elevation){lastElevationAccuracy=elevation;}
134 inline int getAvgPace(){return avgPace;}
135 inline void setAvgPace(int time){avgPace=time;}
137 inline int getBestPace(){return bestPace;}
138 inline void setBestPace(int time){bestPace=time;}
139 QString toSumString();
153 double magneticVariation;
154 double horizontalAccuracy;
155 double verticalAccuracy;
159 explicit GpsPoint(double latitude, double longitude, double elevation);
160 explicit GpsPoint(double latitude, double longitude, double elevation,QDateTime time, double speed,
161 double direction, double magneticVariation,double horizontalAccuracy, double verticalAccuracy);
162 explicit GpsPoint(double latitude, double longitude, double elevation,QDateTime time, double speed,
163 double direction, double magneticVariation,double horizontalAccuracy, double verticalAccuracy, double distancePrev, QTime timeToPrev);
165 //virtual ~GpsPoint();
167 inline double getLatitude(){return latitude;}
168 inline void setLatitude(double lat){latitude=lat;}
170 inline double getLongitude(){return longitude;}
171 inline void setLongitude(double longitude_p){longitude=longitude_p;}
173 inline double getElevation(){return elevation;}
174 inline void setElevation(double elevation_p){elevation=elevation_p;}
176 inline QDateTime getTime(){return time;}
177 inline void setTime(QDateTime time_p){time=time_p;}
179 inline double getSpeed(){return speed;}
180 inline void setSpeed(double speed_p){speed=speed_p;}
182 inline double getDirection(){return direction;}
183 inline void setDirection(double direction_p){direction=direction_p;}
185 inline double getMagneticVariation(){return magneticVariation;}
186 inline void setMagneticVariation(double magneticVariation_p){magneticVariation=magneticVariation_p;}
188 inline double getHorizontalAccuracy(){return horizontalAccuracy;}
189 inline void setHorizontalAccuracy(double horizontalAccuracy_p){horizontalAccuracy=horizontalAccuracy_p;}
191 inline double getVerticalAccuracy(){return verticalAccuracy;}
192 inline void setVerticalAccuracy(double verticalAccuracy_p){verticalAccuracy=verticalAccuracy_p;}
194 inline double getDistancePrev(){return distancePrev;}
195 inline void setDistancePrev(double distance){distancePrev=distance;}
199 GpsPoint& operator= (const GpsPoint&);
201 friend int operator== (const GpsPoint&, const GpsPoint&);
202 friend int operator!= (const GpsPoint&, const GpsPoint&);
203 friend QDataStream& operator<< (QDataStream&, const GpsPoint&);
205 double distance(GpsPoint p);
209 class Lap: public Summarized{
213 QList<GpsPoint*> points;
217 explicit Lap(int number);
220 inline int getNumber(){return number;}
221 inline void setNumber(int number_p){number=number_p;}
223 Summarized* addPoint(GpsPoint* point);
224 inline QList<GpsPoint*> getPoints(){return points;}
229 class Activity: public Summarized{
239 explicit Activity(QString sport);
242 inline QDateTime getId(){return id;}
243 inline void setId(QDateTime time){id=time;}
245 inline QString getSport(){return sport;}
246 inline void setSport(QString sport_p){sport=sport_p;}
248 inline int getNumLaps(){return numLaps;}
249 inline void setNumLaps(int laps){numLaps=laps;}
252 Summarized* addPoint(GpsPoint* point);
254 inline QList<Lap*> getLaps(){return laps;}
259 class Track:public Summarized
267 QList<Activity*> activities;
275 void writeTCXCourses(QXmlStreamWriter* xmlWriter);
276 void writeTCXCourse(QXmlStreamWriter* xmlWriter, Activity* act);
277 void writeTCXLap(QXmlStreamWriter* xmlWriter, Lap* lap);
278 void writeTCXPoint(QXmlStreamWriter* xmlWriter, GpsPoint* point);
279 void writeGPXTracks(QXmlStreamWriter* xmlWriter);
280 void writeGPXTrack(QXmlStreamWriter* xmlWriter, Activity* act);
281 void writeGPXPoint(QXmlStreamWriter* xmlWriter, GpsPoint* point);
282 void writeGPXTrkseg(QXmlStreamWriter* xmlWriter, Lap* lap);
287 explicit Track(QString fileName,QString name);
288 explicit Track(QString fname);
292 bool readFromXML(QString fileName);
293 GpsPoint* parseGpsPoint(QXmlStreamReader& xml);
294 QList<GpsPoint*> getGpsPoints();
295 inline QString getFileName(){return fileName;}
296 inline void setFileName(QString file){fileName=file;}
298 inline QString getName(){return name;}
299 inline void setName(QString n){name=n;}
300 inline void setName(const char* n){name=n;}
301 inline int getNumActivities(){return numActivities;}
302 inline void setNumActivites(int activities){numActivities=activities;}
304 void addActivity(QString sport);
306 Summarized* addPoint(GpsPoint* point);