How it works

From a Garmin export, or a Google Maps link, to a map you can explore

GPX MAP draws the track exactly as your device recorded it, or as you planned it. Nothing is re-routed, snapped to roads or sent to a routing service. Here is what happens to your file or link, step by step: first the map viewer, then the Google Maps to GPX converter.

1. Upload

Drop a .gpx, .kml or .kmz file on the upload box or pick one with the button. The file is sent to the server once, over HTTPS in production, as a normal form upload. The limit is 25 MB, which covers even very long multi-day recordings.

Before the upload starts, a quick Cloudflare Turnstile check confirms you are a person rather than a script. It is invisible in most cases, appears once per page even when the page has several forms, and never looks at your file.

Any GPX 1.0 or 1.1 file works, not only Garmin exports: Garmin Connect, BaseCamp, Garmin Explore, Garmin Desktop App, Strava, Komoot, Wahoo and most other tools export the same format. A KML or KMZ export from Google My Maps or Google Earth is accepted too; it is converted to the same internal model first, as described in step 7.

2. Validation and parsing

The server checks the extension, the size and that the content is well-formed XML with a <gpx> (or <kml>) root. It then reads the file with a strict parser that never loads external resources, so a crafted file cannot make the server fetch anything.

3. Statistics

All figures are calculated from the original points, on the server, using nothing but the file.

Distance
The sum of the great-circle distance between consecutive points inside each segment. Gaps between segments are never counted, because a paused recording may have moved.
Duration and times
From the first to the last timestamp, when the file has them. Planned routes have no ride time, so those fields show a dash.
Moving time and speeds
Speed is computed for each interval between timestamped points. Intervals slower than 2 km/h do not count as moving, and impossible jumps above 300 km/h are treated as GPS glitches and ignored. Average speed is distance over moving time.
Ascent and descent
GPS elevation is noisy, so small wobbles are filtered: a change only counts once the track has climbed or descended at least 2 m from the last counted level. Long climbs are still counted in full.

4. Drawing the map

A long ride can contain tens of thousands of points, more than a browser can draw smoothly. Tracks with more than 5,000 points are simplified for display only, using the Douglas-Peucker algorithm with a tolerance of a few metres, so the line looks identical at any zoom level while the browser handles far fewer points. The statistics always use every original point, and the page tells you when simplification was applied.

The line, the start and finish markers and the map viewport are then rendered in your browser with the Google Maps JavaScript API. Each segment is a separate line, so a recording paused in one town and resumed in another does not get a phantom straight line between them.

5. Elevation profile

If the file contains elevation, the page draws a profile of elevation against distance. Hover or touch it to see the exact figure at any point, and the corresponding spot is highlighted on the map. Very dense recordings are thinned for the chart while keeping every local high and low point, so peaks are never smoothed away.

6. Open in a navigation app

The "Open in" menu builds links to Google Maps and Apple Maps from the start, the finish and up to nine via points of your route, so their directions keep the shape of yours. A planned route contributes its real via points; a recorded track contributes evenly spaced points along the line. These are ordinary links: nothing is sent anywhere until you click one, and the navigation app then calculates its own route between those points.

Google Maps to GPX

Google Maps does not export GPX, and Google My Maps exports only KML, which a Garmin cannot read. The Google Maps to GPX page accepts both a shared link and a KML/KMZ export, and for either one offers two buttons: View on map, which opens the same result page as an upload, and Download GPX, which returns a GPX 1.1 file. The conversion runs entirely in memory; the downloaded file is the only copy.

Getting the input from Google:

7. Converting KML and KMZ files

A KML export is read with the same strict parser as GPX. A KMZ is a zip archive; its doc.kml is extracted in memory, with the unpacked size held to the same limit as an upload. Then each element is mapped:

The same conversion runs when you drop a KML on the upload page: the result is shown as a "Planned route" with its via points, or as a recorded track when the file has timestamps.

9. The GPX file you download

Downloads are GPX 1.1 with the Garmin extensions namespace declared, so BaseCamp, Garmin Desktop App, Garmin Explore, a zūmo or an Edge, Komoot, Kurviger and most planning apps import them directly. Waypoints come first, then the route or tracks. Coordinates are written as plain decimals, times in UTC, and the file name is taken from the route or map name.

Importing a route with via points onto a Garmin gives a trip you can navigate stop by stop. Where the file also carries road-shape points, as a routed directions link does, the device follows that road; where it does not, the device calculates its own road between the stops.

What we do not do

Read the privacy policy for the full picture, upload a file to see it in action, or convert a Google Maps route.