@startuml class Track { -id -name -description -category -numberOfPoints -icon } Track o-- TrackPoint Track o-- Marker Track "1" - "1" TripStatistics class TripStatistics { - startTime - stopTime - totalDistance - totalTime - movingTime - maxSpeed - totalElevationGain } note left of TripStatistics The time is based upon device time. end note class TrackPoint { - id - trackId - longitude - latitude - time - altitude - accuracy - speed - bearing - sensor_heartrate - sensor_cadence - sensor_power } note right of TrackPoint TODO TrackPoints are mixing two concepts: 1. a GPS measurement provided by the GPS hardware 2. and also segment markers. These are marked by PAUSE / RESUME TrackPoints. While exporting PAUSE/RESUME are not used to create these segments and these are partly recreated when imported. However, the timestamp of PAUSE/RESUME is not exported and can therefore not be restored. This prevents us from restoring the exact TripStatistics. It is also noteworthy that neither PAUSE/RESUME TrackPoints are used for computing the TrackStatistics. Only the timestamp to _create_ those is used. end note note left of TrackPoint TODO The time stored in TrackPoints is either: 1. created via GPS: provided by the GPS hardware 2. created by the user (pause/resume): device time. We know that the GPS time and device time are often not in sync. end note TrackPoint "1" - "1" android.location.Location class Marker { - id - trackId - name - description - category - icon - length - duration - location - tripStatistics - photoUrl } @enduml