| 43 | } |
| 44 | |
| 45 | void TrackStatistics::AddGpsInfoPoint(location::GpsInfo const & point) |
| 46 | { |
| 47 | auto const pointWithAltitude = |
| 48 | geometry::PointWithAltitude(mercator::FromLatLon(point.m_latitude, point.m_longitude), point.m_altitude); |
| 49 | auto const altitude = geometry::Altitude(point.m_altitude); |
| 50 | if (HasNoPoints()) |
| 51 | { |
| 52 | m_minElevation = altitude; |
| 53 | m_maxElevation = altitude; |
| 54 | m_previousPoint = pointWithAltitude; |
| 55 | m_previousTimestamp = point.m_timestamp; |
| 56 | return; |
| 57 | } |
| 58 | |
| 59 | m_minElevation = std::min(m_minElevation, altitude); |
| 60 | m_maxElevation = std::max(m_maxElevation, altitude); |
| 61 | |
| 62 | auto const deltaAltitude = altitude - m_previousPoint.GetAltitude(); |
| 63 | if (deltaAltitude > 0) |
| 64 | m_ascent += deltaAltitude; |
| 65 | else |
| 66 | m_descent -= deltaAltitude; |
| 67 | m_length += mercator::DistanceOnEarth(m_previousPoint.GetPoint(), pointWithAltitude.GetPoint()); |
| 68 | m_duration += point.m_timestamp - m_previousTimestamp; |
| 69 | |
| 70 | m_previousPoint = pointWithAltitude; |
| 71 | m_previousTimestamp = point.m_timestamp; |
| 72 | } |
| 73 | |
| 74 | void TrackStatistics::AddPoints(Points const & points) |
| 75 | { |