Command-line scripts to do things with Strava.
You can export an archive of your account
including your activities in their
original file format (eg. GPX or FIT format, some gzipped, some not) and
named like 971607640.gpx
, 83514080.gpx.gz
and 1243401459.fit.gz
.
(The Strava support page
talks of deleting accounts when exporting, but you don't need to delete
anything!)
Here are some tools and notes to have them in a similar format.
First request an archive from your account following this guide
and wait for the email. Unzip export_xxxxxxx.zip and move the
activities
directory and activities.csv
to the current dir.
# Rename files from 1836025202.gpx to 20180912-064451-Ride.gpx
# First a test run without changing files
python3 rename_activities.py --dry-run
# Then do it
python3 rename_activities.py
# Unzip files, deletes GZ files
gunzip activities/*.gz
Here's some different methods to convert from FIT to GPX.
If you have any FIT files, you can use GPSBabel to convert them:
# Install on Mac
brew install gpsbabel
# Convert activities/*.fit to activities/*.gpx, keeps FIT files
bash fits2gpxs.sh
# Optionally delete the FIT files
# rm activities/*.fit
The Wahoo Elemnt Bolt creates files in FIT version 2. Use GPSBabel 1.6.0 or later, or you may get fit: Unsupported protocol version 2.0
with older versions such as GPSBabel 1.5.4.
Alternatively, try Jeffrey Friedl's FIT-to-GPX.
- Download the Java
FitCSVTool
included with the free FIT SDK (direct download link).
wget https://raw.githubusercontent.com/jeffrey-friedl/FIT-to-GPX/master/fit2gpx
edit fit2gpx fits2gpx.sh
Update JAVA_FITCSV_CMD
in fit2gpx
to point to the file in the downloaded
SDK and edit fits2gpxs
to use fit2gpx
instead of gpsbabel
.
# Convert activities/*.fit to activities/*.gpx, keeps FIT files
bash fits2gpxs.sh
Follow the Strava guide to export each file.
Alternatively, use download_fit_as_gpx.py
to get several. See instructions at
the top of the file.
Left the GPS recorder paused when on a train? Chop out long paused sections of GPX tracks, and put them into a split/ subdir.
pip install --upgrade gpxpy termcolor tqdm
python splitter.py
cp split/activities/*.gpx activities
# backup are at split-backup/activities
Generate heatmaps by dragging and dropping files into https://erik.github.io/derive/
You can make some great visualisations with
marcusvolz/strava. See that repo and
stravaviz.R
for examples.
- https://twitter.com/hugovk/status/945040232117952512
- https://twitter.com/hugovk/status/947350084429254656
- https://twitter.com/hugovk/status/1043926402616238080
If you get an error with the marcusvolz/strava visualisation tools when plotting elevations:
> p3 <- plot_elevations(data)
> ggsave("plots/elevations-all.png", p3, width = 20, height = 20, units = "cm")
Error in FUN(X[[i]], ...) : object 'ele' not found
It means not all the coordinate trackpoints in your GPX files have elevation values.
Some options:
-
Export those tracks from Strava. Strava makes altitude corrections, which is why their exports have points with elevation values when original files do not.
-
Skip plotting elevations.
Generate heatmaps using gpx_heatmap.py
. See instructions at the top of the file and
update the HEATMAPPY
path for the file downloaded from https://sethoscope.net/heatmap/