During an exercise, Garmin allows you to pause recording so that your split times and pace are not affected. How are these paused periods represented in the TCX format? I've looked through the TCX schema, but did not find an obvious answer.
3 Answers
The activity in a TCX file is divided into laps. Each lap contains one or more Tracks which contain Trackpoints which are the individual records of position, heart rate, and so on. If you pause and restart the watch, the pause closes the current track, and the restart opens a new Track. So, for instance, if you pause twice in the first mile, using auto lap at each mile, the first Lap will contains three Tracks. Analysis software should use this structure to work out that the watch paused after the last Trackpoints in each Track and restarted at the first Trackpoint in the next Track.
I couldn't find any documentation of this either; it's based on inspection of Garmin data when I was working on the same problem when I needed to convert Timex .pwx files into TCX to upload to a site that didn't properly support pwx.

- 81
- 1
Below an excerpt from a TCX file where I pressed "Stop" and later "Start" again... perhaps this helps.
<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase
xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"
xmlns:ns5="http://www.garmin.com/xmlschemas/ActivityGoals/v1"
xmlns:ns3="http://www.garmin.com/xmlschemas/ActivityExtension/v2"
xmlns:ns2="http://www.garmin.com/xmlschemas/UserProfile/v2"
xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.garmin.com/xmlschemas/ProfileExtension/v1">
<Activities>
<Activity Sport="Biking">
<Id>2014-11-24T11:13:26.000Z</Id>
<Lap StartTime="2014-11-24T11:13:26.000Z">
<TotalTimeSeconds>1608.813</TotalTimeSeconds>
<DistanceMeters>8046.74</DistanceMeters>
<MaximumSpeed>7.539000034332275</MaximumSpeed>
<Calories>185</Calories>
<AverageHeartRateBpm>
<Value>117</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm>
<Value>133</Value>
</MaximumHeartRateBpm>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2014-11-24T11:13:26.000Z</Time>
<Position>
<LatitudeDegrees>51.98118514381349</LatitudeDegrees>
<LongitudeDegrees>5.9239620342850685</LongitudeDegrees>
</Position>
<AltitudeMeters>16.399999618530273</AltitudeMeters>
<DistanceMeters>2.990000009536743</DistanceMeters>
<HeartRateBpm>
<Value>100</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>2.7809998989105225</Speed>
</TPX>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2014-11-24T11:13:27.000Z</Time>
<Position>
<LatitudeDegrees>51.98120073415339</LatitudeDegrees>
<LongitudeDegrees>5.92398751527071</LongitudeDegrees>
</Position>
<AltitudeMeters>16.399999618530273</AltitudeMeters>
<DistanceMeters>5.28000020980835</DistanceMeters>
<HeartRateBpm>
<Value>100</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>2.4820001125335693</Speed>
</TPX>
</Extensions>
</Trackpoint>
…
<Trackpoint>
<Time>2014-11-24T11:40:04.000Z</Time>
<Position>
<LatitudeDegrees>51.980356089770794</LatitudeDegrees>
<LongitudeDegrees>5.986622795462608</LongitudeDegrees>
</Position>
<AltitudeMeters>9.800000190734863</AltitudeMeters>
<DistanceMeters>7991.759765625</DistanceMeters>
<HeartRateBpm>
<Value>132</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>5.625999927520751</Speed>
</TPX>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2014-11-24T11:40:15.000Z</Time>
<Position>
<LatitudeDegrees>51.979938838630915</LatitudeDegrees>
<LongitudeDegrees>5.986063219606876</LongitudeDegrees>
</Position>
<AltitudeMeters>10.399999618530273</AltitudeMeters>
<DistanceMeters>8052.0400390625</DistanceMeters>
<HeartRateBpm>
<Value>132</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>5.52400016784668</Speed>
</TPX>
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.001999855041504</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-11-24T11:40:16.000Z">
<TotalTimeSeconds>1722.237</TotalTimeSeconds>
<DistanceMeters>8046.74</DistanceMeters>
<MaximumSpeed>6.960999965667725</MaximumSpeed>
<Calories>211</Calories>
<AverageHeartRateBpm>
<Value>127</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm>
<Value>139</Value>
</MaximumHeartRateBpm>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2014-11-24T11:40:27.000Z</Time>
<Position>
<LatitudeDegrees>51.97950725443661</LatitudeDegrees>
<LongitudeDegrees>5.985447987914085</LongitudeDegrees>
</Position>
<AltitudeMeters>10.600000381469727</AltitudeMeters>
<DistanceMeters>8116.02001953125</DistanceMeters>
<HeartRateBpm>
<Value>133</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>5.290999889373779</Speed>
</TPX>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2014-11-24T11:40:39.000Z</Time>
<Position>
<LatitudeDegrees>51.97918321006</LatitudeDegrees>
<LongitudeDegrees>5.984910121187568</LongitudeDegrees>
</Position>
<AltitudeMeters>11.0</AltitudeMeters>
<DistanceMeters>8167.740234375</DistanceMeters>
<HeartRateBpm>
<Value>132</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>2.882999897003174</Speed>
</TPX>
</Extensions>
</Trackpoint>
…
<Trackpoint>
<Time>2014-11-24T12:40:18.000Z</Time>
<Position>
<LatitudeDegrees>51.97844828478992</LatitudeDegrees>
<LongitudeDegrees>5.918068299070001</LongitudeDegrees>
</Position>
<AltitudeMeters>16.0</AltitudeMeters>
<DistanceMeters>24482.119140625</DistanceMeters>
<HeartRateBpm>
<Value>119</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>2.733999967575073</Speed>
</TPX>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2014-11-24T12:40:32.000Z</Time>
<Position>
<LatitudeDegrees>51.97893384844065</LatitudeDegrees>
<LongitudeDegrees>5.9180795308202505</LongitudeDegrees>
</Position>
<AltitudeMeters>16.0</AltitudeMeters>
<DistanceMeters>24536.23046875</DistanceMeters>
<HeartRateBpm>
<Value>119</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<Speed>3.134999990463257</Speed>
</TPX>
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.084000110626221</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Creator xsi:type="Device_t">
<Name>Garmin Forerunner 620</Name>
<UnitId>3876874811</UnitId>
<ProductID>1623</ProductID>
<Version>
<VersionMajor>3</VersionMajor>
<VersionMinor>10</VersionMinor>
<BuildMajor>0</BuildMajor>
<BuildMinor>0</BuildMinor>
</Version>
</Creator>
</Activity>
</Activities>
<Author xsi:type="Application_t">
<Name>Garmin Connect API</Name>
<Build>
<Version>
<VersionMajor>14</VersionMajor>
<VersionMinor>10</VersionMinor>
<BuildMajor>0</BuildMajor>
<BuildMinor>0</BuildMinor>
</Version>
</Build>
<LangID>en</LangID>
<PartNumber>006-D2449-00</PartNumber>
</Author>
</TrainingCenterDatabase>

- 41
- 1
-
1So basically and from my experience with TCX files, if the time between 2 TrackPoint – Frederic Sep 20 '20 at 20:36
-
Did you ever confirm this @Frederic? – Happy John Feb 02 '23 at 05:39
-
@HappyJohn, what I ended up finding is that if only the time is provided in the Trackpoint element, then it is considered to be a pause. – Frederic Feb 06 '23 at 05:40
-
Alright, what I've concluded after more experimenting is that each service/platform that scans TCX files identifies and handles pauses differently, definitely inconvenient. Thanks for coming back to a two year old comment :) – Happy John Feb 06 '23 at 06:31
I don't know if this helps, but I have a FitBit watch and I accidentally pressed the pause in the middle of one of my rides. I wanted to correct it, I never found any documentation on how to fix it. So, after some random attempts to fix it by uploading and downloading the file in different formats I found something. The original file when uploaded to Ride with GPS had many trackpoints with:
<DistanceMeters>0.0</DistanceMeters>
The total distance reported on Ride with GPS was 7789.23 When I downloaded the file from Ride with GPS again I realized that the trackpoins which had distance marked as 0.0 would have then 7789.23 as
<DistanceMeters>7789.23</DistanceMeters>
So I got my original FitBit file and removed all 0.0 DistanceMeters Then I uploaded again and it fixed my distance to the correct final distance should have had. Also, I saw that my original FitBit file had the Lap distance as 7789.23, but I did not have to fix it on the lap itself. So the answer is on the calculated distance and speeds which may be skewed when hardcoded by the tracker.

- 31
- 3
-
3I'm the original question asker. Your answer gave me a big smile! This story has come full circle, so I must tell it. When I posted this question in 2014, I was working at Fitbit. We had just launched GPS tracking and wanted to offer TCX exports of data so people could use the data from their Fitbit devices in other apps. TCX is not a public standard and Garmin's implementations varied across devices, hence my question. I implemented the behavior you described for Fitbit because that's what Strava's engineers recommended based on their dealing with Garmin's sloppy implementations. – Well Actually Feb 08 '21 at 13:04
-
2I must further clarify: Fitbit's implementation of TCX is **not** authoritative. It was my best guess based on what I observed from Garmin devices' output since Garmin's documentation was lacking and its implementations varied. The world deserves a better format than TCX for this data. – Well Actually Feb 08 '21 at 13:08
-
1@JeremiahLee very cool. I also smiled here. My original quest was to find how the pause was implemented in GPX files. That I could not find very clear. Then I decided to look at the TCX file instead and found what I added to m answer. I fixed my problem. Any insights for the GPX? – AndVel Feb 09 '21 at 14:11
-
1I think I will work on a solution for uploading my activities directly to Ride with GPS using the FitBit and RwGPS API's. A bit sad that FitBit did not implement it. – AndVel Feb 09 '21 at 14:12