I love riding GPS routes on my Tacx trainer, but I wasn't happy with the built-in functionality for changing the elevation profile of a ride. The built-in smoothing is very slow and still leaves a lot of spikes in elevation. It is next to impossible to remove steep downhill grades that I don't want as part of my indoor training.

The GPX Smoother lets you load a GPX file and apply a few different "smoothing" algorithms to the elevation. The resulting GPX file can be saved to a file and then imported back into your Tacx trainer software.

Smooth - uses simple box-score smoothing to smooth the elevation over 5 points.
Set Range - lets you set the maximum and minimum slope.
Flatten - lets you set the maximum change in slope between any two points.

Slide the triangular handles on the smaller graph to select only a portion of the ride to smooth. This allows you create a ride similar to a Slope-Distance Catalyst ride.

The code for the GPX Smoother is now on github at https://github.com/brenzy/gpx-smoother.

This is a work in progress. Drop me a line at to request changes or report issues.

Bug Fix (February 16, 2019):
Fix the tooltips and upgrade to d3.js v5.

Bug Fix & Remove Google Maps functionality (February 2, 2019):
Fix for adding the previous elevation to a point. Google Maps elevation is no longer available free of charge, so the functionality to add elevation has been removed.

Functionality Change(January 21, 2019):
When an elevation tag is missing, the GPX Smoother will add an elevation tag containing the same value as the previous point. If there is no elevation in the GPX file an arbitrary value of 100 metres will be used for elevation.

New Functionality (January 1, 2015):
Added elevation profile and changed slope to a step chart.

New Functionality (November 1, 2014):
Added a Distance vs. Slope graph for Kostya, added "Hide Original" checkbox, swap order of min and max slope boxes.

New Functionality (September 13, 2014):
Added the ability to adjust the number of points to smooth over and the ability to shift the slope upwards or downwards. Marcel, thanks for sending along these two changes!

New Functionality (March 8, 2014):
Add ability to add elevation from Google Maps Elevation Service.

New Functionality (January 26, 2014):
Added zoom to the selected portion of the ride.

New Functionality (January 12, 2014):
Use the drag handles to select the portion of the ride to be smoothed.

Bug Fix (January 7, 2014):
Trying to download large files will crash the browser. Added a message to use the copy and paste method instead. Thanks Guy!

1. Select a gpx file:
Missing elevation tags have been added and set to the value of the previous point or 100 metres.
2. Smooth the data:
3. Check out the resulting slope. Hover over a point to see details:
Original New Slope
Average Slope:
4. Slide the triangles in the graph below to zoom in on a portion of the ride and to select that portion of the ride to be smoothed.
5. Try different smoothing:
6.
This file is too large to download, please copy and paste the result in step 6 instead.
7. If the download button does not work, copy (right click, Select all, Copy) the contents of the box below (which contains the resulting gpx) and save to a gpx file.