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.
- Recorded tracks (
<trk>) are preferred. Every<trkseg>becomes its own segment, and multiple tracks in one file are merged into a single result while keeping each segment separate. - Planned routes (
<rte>) are used when a file has no track. Each<rtept>is a via point. Garmin stores the road shape between via points as extension points; those are read too, so a planned route follows the roads instead of drawing straight lines between stops. A route that holds only its stops, with no such points, is routed by road with the Google Routes API in the travel mode you pick under the upload box (driving, cycling or walking) with the route options to avoid highways, tolls or ferries, exactly like a shared directions link in step 8. The page labels the result "Planned route" and shows the via point count. - Every coordinate must be a valid latitude and longitude, and the file needs at least two usable points. Otherwise you get a clear error and can try another file.
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:
- A shared link: in Google Maps open your directions or the place, press Share and copy the link. It usually starts with
https://maps.app.goo.gl/. - A My Maps export: in Google My Maps open the menu next to the map name and choose "Export to KML/KMZ". Exporting the whole map or a single layer both work.
- A My Maps link: if the map is shared publicly, its viewer link works directly and the server fetches the KML for you.
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:
- Pins (
<Point>) become GPX waypoints with their name and description. - Directions, that is a line with pins sitting on it, become a planned route (
<rte>). The pins are its via points in travel order, and an out-and-back that passes the same place twice keeps both visits in the right sequence. The line between two pins is stored as Garmin road-shape points on the earlier one, exactly like a route saved from Garmin Desktop App or BaseCamp, so a Garmin navigates it stop by stop along the road Google drew. The pins stay in the file as waypoints as well. - Other lines and shapes (
<LineString>,<LinearRing>, polygon outlines) become tracks; a placemark with several lines becomes one track with several segments. - Google Earth recordings (
<gx:Track>) keep their timestamps, so the map page can show duration and speed for them. - The map name becomes the GPX name. An export without one, as directions exports often are, is named after its route; unnamed placemarks take the name of their folder.
- Google My Maps writes an altitude of 0 for every point. When a file has no other altitude, elevation is left out of the GPX rather than producing a flat profile at sea level.
- Styling, icons, colours and images are not part of GPX and are dropped. A KMZ must contain a
.kmlfile; its other contents are ignored.
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.
8. Converting shared links
A link copied from the Share button is resolved on the server and turned into the same kind of document, without any file.
- Directions links contain the stops with their coordinates, but not the road Google drew between them. The result is a route whose via points are the stops, named after the first and last one. The road between the stops is then computed with the Google Routes API in the travel mode you pick under the link field (driving, cycling or walking; a pasted link preselects the mode it was shared with) and, for driving, with the route options to avoid highways, tolls or ferries. That road becomes the route's shape, so the GPX and the map follow the streets. Transit directions follow buses and trains and cannot become a GPX route. When no road can be found in that mode, or the routing service is not available, the legs are drawn as straight lines and a notice on the map page says so; the "Open in" menu hands the same stops to your navigation app, which routes them by road. Directions typed as place names only, without coordinates, cannot be placed, since there is no geocoder here; sharing the link from Google Maps itself always includes the coordinates.
- Place links become a GPX with a single waypoint. A single place cannot be shown as a route on the map, so only the download applies.
- My Maps links are fetched as KML, provided the map is shared publicly, and converted exactly like an uploaded file in step 7, including the road shape of its directions layers. A private map produces a clear error and the suggestion to export it as KML instead.
- Short links (
maps.app.goo.gl) are resolved by following their redirect. Every request stays on Google's hosts; the server never follows a link anywhere else, gives up after a few hops, and waits at most ten seconds per request.
Resolving a link means the server sends it to Google once, together with the map ID of a My Maps link, and sends the stop coordinates and travel mode of a directions link to the Google Routes API once. Nothing about the link or the result is kept; see the privacy policy.
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
- We do not store your file or your link. It is processed in memory and discarded as soon as the page or the GPX is sent. Refreshing the result page asks you to upload again for that reason.
- We do not send your track to a routing service. The Google Maps API in your browser only draws what the server already computed, and the server contacts Google only to resolve a link you pasted.
- We do not require an account. The only cookies are those of Google Analytics, described in the privacy policy.
Read the privacy policy for the full picture, upload a file to see it in action, or convert a Google Maps route.