elevationLoss=0.0;
minElevation=0.0;
maxElevation=0.0;
+ lastElevation=0.0;
avgPace=0.0;
bestPace=0.0;
+ lastElevationAccuracy=ACCURACY_V_GAIN+1;
+
}
QString Summarized::toSumString(){
void Summarized::addSummary(Summarized summary){
duration+=summary.getDuration();
- distance=distance+summary.getDistance();
+ distance+=summary.getDistance();
+
// avgSpeed of summary is not Avg, is speed of last point!
if(summary.getAvgPace()!=-1)
avgSpeed=((avgSpeed*numPoints)+summary.getAvgSpeed())/(numPoints+1);
- elevationGain+=summary.getElevationGain();
- elevationLoss+=summary.getElevationLoss();
+ if(summary.lastElevationAccuracy<=ACCURACY_V_GAIN){
+
+ elevationGain+=summary.getElevationGain();
+ elevationLoss+=summary.getElevationLoss();
- if(minElevation!=0 && summary.minElevation!=0){
- minElevation=min(minElevation,summary.minElevation);
- }else if(minElevation==0 && summary.minElevation!=0){
- minElevation=summary.minElevation;
+ if(minElevation!=0 && summary.minElevation!=0){
+ minElevation=min(minElevation,summary.minElevation);
+ }else if(minElevation==0 && summary.minElevation!=0){
+ minElevation=summary.minElevation;
+ }
+
+ maxElevation=max(maxElevation,summary.maxElevation);
+ lastElevation=summary.lastElevation;
+ lastElevationAccuracy=summary.lastElevationAccuracy;
}
- maxElevation=max(maxElevation,summary.maxElevation);
maxSpeed=max(maxSpeed,summary.maxSpeed);
if(bestPace!=0 && summary.avgPace!=0){
bestPace=summary.avgPace;
}
- avgPace=(1000*duration)/(60*distance);
+ if(distance>0)
+ avgPace=(1000*duration)/(60*distance);
+
numPoints++;
}
endTime=point.getTime();
maxSpeed=point.getSpeed();
avgSpeed=point.getSpeed();
- minElevation=point.getElevation();
- maxElevation=point.getElevation();
+
+ lastElevationAccuracy = point.getVerticalAccuracy();
+
+
+ if(lastElevationAccuracy<=ACCURACY_V_GAIN){
+ minElevation=point.getElevation();
+ maxElevation=point.getElevation();
+ lastElevation=point.getElevation();
+ }
return (*this);
}
// data in here is not secure and not controlled.
numPoints++;
+
+ qDebug() << "first:" << first.toString();
+ qDebug() << "last:" << last.toString();
+
distance=first.distance(last);
duration=first.getTime().secsTo(last.getTime());
startTime=first.getTime();
endTime=last.getTime();
double lastEle=last.getElevation();
double firstEle=first.getElevation();
- if(lastEle>=firstEle)
- elevationGain=lastEle-firstEle;
- else
- elevationLoss=firstEle-lastEle;
+
+ lastElevationAccuracy = last.getVerticalAccuracy();
+
+ qDebug() <<"firstElevation:" << firstEle;
+ qDebug() <<"lastElevation:" << lastEle;
+ qDebug() << "vertical accuracy:" << lastElevationAccuracy;
+
+
+ if(lastElevationAccuracy<=ACCURACY_V_GAIN){
+ if(lastEle>=firstEle){
+ elevationGain=lastEle-firstEle;
+ }else{
+ elevationLoss=firstEle-lastEle;
+ }
+
+ minElevation=min(first.getElevation(),last.getElevation());
+ maxElevation=max(first.getElevation(),last.getElevation());
+ lastElevation = last.getElevation();
+ }
maxSpeed=max(first.getSpeed(),last.getSpeed());
// keep speed of last point, will be usefull
// in add function
avgSpeed=last.getSpeed();
- minElevation=min(first.getElevation(),last.getElevation());
- maxElevation=max(first.getElevation(),last.getElevation());
- avgPace=(1000*duration)/(60*distance);
+
+
+ if(distance>0)
+ avgPace=(1000*duration)/(60*distance);
return (*this);
}
-GpsPoint::GpsPoint(double latitude, double longitude, int elevation)
+GpsPoint::GpsPoint(double latitude, double longitude, double elevation)
:latitude(latitude),
longitude(longitude),
elevation(elevation),speed(0),direction(0),magneticVariation(0),horizontalAccuracy(0),verticalAccuracy(0){
}
-GpsPoint::GpsPoint(double latitude, double longitude, int elevation,QDateTime time,
- qreal speed, qreal direction, qreal magneticVariation, qreal horizontalAccuracy, qreal verticalAccuracy)
-:latitude(latitude),longitude(longitude),elevation(elevation),time(time),
+GpsPoint::GpsPoint(double latitude, double longitude, double elevation,QDateTime time,
+ double speed, double direction, double magneticVariation, double horizontalAccuracy, double verticalAccuracy)
+:latitude(latitude),longitude(longitude),elevation(elevation), time(time),
speed(speed), direction(direction), magneticVariation(magneticVariation),
horizontalAccuracy(horizontalAccuracy),verticalAccuracy(verticalAccuracy){
+ //qDebug() << "elevation:" << elevation;
}
-GpsPoint::GpsPoint(double latitude, double longitude, int elevation,QDateTime time,
- qreal speed, qreal direction, qreal magneticVariation, qreal horizontalAccuracy, qreal verticalAccuracy,
- qreal distancePrev, QTime timeToPrev)
+GpsPoint::GpsPoint(double latitude, double longitude, double elevation,QDateTime time,
+ double speed, double direction, double magneticVariation, double horizontalAccuracy, double verticalAccuracy,
+ double distancePrev, QTime timeToPrev)
:latitude(latitude),longitude(longitude),elevation(elevation),time(time),
speed(speed), direction(direction), magneticVariation(magneticVariation),
horizontalAccuracy(horizontalAccuracy),verticalAccuracy(verticalAccuracy),distancePrev(distancePrev), timeToPrev(timeToPrev){
double GpsPoint::distance(GpsPoint p){
+ double dist=0;
+
double latitude1 = toRad(latitude);
double longitude1 = toRad(longitude);
double latitude2 = toRad(p.latitude);
double longitude2 = toRad(p.longitude);
- double temp = sin(latitude1)*sin(latitude2)+cos(latitude1)*cos(latitude2)*cos(longitude2-longitude1);
+ if(latitude1==latitude2 && longitude1==longitude2){
+ dist=0;
+ }else{
- double dist= acos(temp)*EARTH_RADIUS*1000;
- //qDebug() << "distance between points: " << QString::number(dist,'f',10);
+ double temp = sin(latitude1)*sin(latitude2)+cos(latitude1)*cos(latitude2)*cos(longitude2-longitude1);
+ dist= acos(temp)*EARTH_RADIUS*1000;
+ }
+ qDebug() << "distance between points: " << QString::number(dist,'f',10);
return dist;
}