Track properties gain activity_type (FIT: sport enum from the session/sport message, Garmin's own table; GPX: <trk><type> passed through as-is) alongside the existing distance/elevation/duration. Clicking a track line now opens a bottom panel with a chart per metric the track actually has (elevation always; speed/cadence/heart rate only when present — FIT's record fields or GPX's device extensions). TrackStats.build_profile computes cumulative distance the same way for both formats so they're directly comparable. One pointermove listener drives a synchronized crosshair across every chart, a single tooltip listing all series, and a map marker at the hovered point's position — hovering the chart shows where on the track that moment was.
40 lines
1.2 KiB
XML
40 lines
1.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<gpx version="1.1" creator="test">
|
|
<wpt lat="48.1" lon="17.2">
|
|
<ele>200</ele>
|
|
<name>Start</name>
|
|
<desc>Trailhead, see https://example.com/trail for details</desc>
|
|
<time>2026-01-01T09:00:00Z</time>
|
|
</wpt>
|
|
<trk>
|
|
<name>Morning Loop</name>
|
|
<type>running</type>
|
|
<trkseg>
|
|
<trkpt lat="48.1" lon="17.2">
|
|
<ele>200</ele>
|
|
<time>2026-01-01T09:00:00Z</time>
|
|
<extensions>
|
|
<gpxtpx:TrackPointExtension xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1">
|
|
<gpxtpx:hr>140</gpxtpx:hr>
|
|
<gpxtpx:cad>80</gpxtpx:cad>
|
|
</gpxtpx:TrackPointExtension>
|
|
</extensions>
|
|
</trkpt>
|
|
<trkpt lat="48.101" lon="17.201">
|
|
<ele>250</ele>
|
|
<time>2026-01-01T09:10:00Z</time>
|
|
<extensions>
|
|
<gpxtpx:TrackPointExtension xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1">
|
|
<gpxtpx:hr>155</gpxtpx:hr>
|
|
<gpxtpx:cad>84</gpxtpx:cad>
|
|
</gpxtpx:TrackPointExtension>
|
|
</extensions>
|
|
</trkpt>
|
|
<trkpt lat="48.102" lon="17.202">
|
|
<ele>230</ele>
|
|
<time>2026-01-01T09:20:00Z</time>
|
|
</trkpt>
|
|
</trkseg>
|
|
</trk>
|
|
</gpx>
|