[[minLat, minLng], [maxLat, maxLng]], or null for a GPS-less activity.
Distance-grid profiles, one per present channel (elevation first).
The same totals activity.stats() gives: distance on the activity's
one distance axis (a pool swim's lengths, else the samples).
From the activity's start (or an earlier sample) to its last sample, or to a pool swim's last length.
OptionalgpsPresent only when some samples had no GPS fix (an open water swim never:
its cleaned line has a position at every sample): where each run of
fixes sits on the distance axis and on the map line. Place a chart
position on the map with lineDistanceAt / lineRange; their metres are
along the raw joined fixes, so slice the simplified polyline with
polylineSlice(..., { domainTotal: gpsSpans.at(-1).lineEndMeters }).
Without it the two rulers are the same.
Recorded laps (device-marked), if the source carried them.
By the activity's moving rule: a pool swim's lengths, the time between
samples at or above MOVING_SPEED_MPS, or, for a swim with no GPS and
nothing else to go by, the watch's swim time.
Douglas–Peucker-simplified [lat, lng] line for the map overview; empty
for a GPS-less activity (no map).
Per-kilometre splits (computed, evenly spaced).
Everything the activity summary holds, computed from one activity's streams.