Correct GPS drift by snapping your route onto the roads it was actually run or ridden on. Handles junctions correctly, and leaves trail or off-road sections untouched.
Drop your GPX, TCX or FIT file here
or click to browse
Route as recorded · click "Snap to Roads" to correct it
Points with no road within this distance are left unchanged.
Checking the road network…
Nice and clean!
Turn this corrected route into a high-resolution poster for your wall or as a digital print.
Make this map poster →Good to know
The obvious way to snap a GPS point to a road is to find the closest one and move the point there. That works fine on a long straight stretch, but it falls apart exactly where it matters most: where two roads run close together, or split apart at a Y. At that point, GPS noise alone can make either road the "nearest" one from one sample to the next, so a naive snap doesn't correct the route, it makes it worse, visibly zig-zagging between two roads that the person only ran or rode on one of.
This tool avoids that by first reducing your route to the points that actually define its shape, dropping any point that's within about 2 metres of a straight line between its neighbours, the same simplification the map editor itself uses. That alone removes most of the single-sample GPS noise that causes flip-flopping in the first place. It then works through the remaining points in order with one simple rule: once a point is matched to a road, the next point stays on that same road unless a different one is clearly closer, not just marginally nearer. Either road can be the "nearest" from one point to the next right at a junction, but only a real, sustained move to a different road clears that bar, so the result stays on whichever branch you actually took.
None of that helps if the route genuinely isn't on a road, a trail through a park, a path across a field, a stretch of open water. So every point also gets a maximum snap distance: if nothing in the road network is within it, that point is left exactly as your device recorded it rather than being pulled onto the nearest street regardless of how far away it actually is. 10 metres is a sensible default for ordinary GPS accuracy, and you can widen or narrow it before snapping depending on how noisy your device tends to be and how conservative you want the result to be.
Only position changes in the process. Every timestamp is left exactly as recorded, and so is elevation, heart rate, cadence and power wherever your file has them, the corrected file has the same points, in the same order, with the same everything except where they sit on the map.
FAQ
Consumer GPS is only accurate to a few metres, sometimes tens of metres under tree cover or between buildings. On a poster or a heatmap that shows up as a faint wobble or zigzag along an otherwise straight road. Snapping moves each point onto the road it was actually recorded on, so the line reads as clean as the road really is.
It doesn't snap each point to whichever road happens to be nearest at that instant, since that's exactly what would flip-flop at a Y-junction, as either branch is the nearest neighbour at different points along it. The route is first reduced to the points that actually define its shape, which removes most of the GPS noise that causes this in the first place. It then keeps a point on whichever road the previous point matched unless a different road is clearly closer, not just marginally nearer, so a brief coincidence at a junction isn't enough to switch the result to the wrong branch.
Nothing, that's what the snap distance controls. Any point with no matching road within that distance is left exactly as recorded, so a route that leaves the road network for a trail, a field or open water stays true to what you actually did instead of being dragged onto the nearest street.
10 metres works well for most GPS-recorded activities and is the default. Widen it if your device runs a bit noisier than that (dense tree cover, a narrow street between tall buildings); narrow it if you want to be conservative about which points get touched at all.
Reading the file, converting formats, matching points to roads and generating the download all happen in your browser, same as the other tools here. Finding nearby roads is the one part that can't run offline: the bounding box of your route, not your individual GPS points, is sent to Overpass, OpenStreetMap's public data API, purely to fetch the road network in that area. No file, name or account is involved.
Yes. Upload any of the three, and download the corrected result in whichever of the three you need, they don't have to match.
No. Only the latitude and longitude of each point are adjusted. Every timestamp is left exactly as recorded, along with elevation, heart rate, cadence and power wherever your file has them, the corrected file has the same number of points, in the same order, with the same everything except position.
Yes, and it's built specifically not to force those sections onto a road. Anything farther from a road than the snap distance is left exactly as recorded, so a genuine trail or off-road stretch stays true to what you actually did.
A gap is simply treated as a longer stretch between two known points. The points on either side of the gap still get matched normally; nothing in the gap itself is invented.
More tools
Replace noisy GPS or barometric altitude with accurate ground elevation.
Open tool →Shrink an oversized GPS file by removing redundant points, route stays the same.
Open tool →Detects loops, out-and-backs and one-way routes, then lets you download just one leg.
Open tool →Once it's snapped to the road, the same file works straight in the map editor.
Open the editor →Every file you work on here can become a print or poster.