Decode an activity's streams into the shared per-sample arrays. ONE path now:
build the canonical series, read its columns; distance comes from haversine
when there are positions, else the device distance column (GPS-less, or
an open water swim that recorded it).
Decode an activity's streams into the shared per-sample arrays. ONE path now: build the canonical series, read its columns; distance comes from haversine when there are positions, else the device
distancecolumn (GPS-less, or an open water swim that recorded it).