GPX Converter

100% private — files never leave your browser

TCX to GeoJSON Converter

Turn .tcx training files into .geojson that loads straight into QGIS, Mapbox, Leaflet and any data pipeline. Laps become separate features, timestamps ride along in coordinateProperties.times, and the conversion happens entirely on your device.

How to convert to GeoJSON

  1. 1

    Drop your file

    Drag a FIT, GPX, TCX, KML, KMZ or GeoJSON file onto the box above, or click it to browse. The source format is detected automatically from the file contents.

  2. 2

    Wait a beat

    The conversion runs in a background worker on your device. Typical activities finish in well under a second; even 50 MB files process without freezing the page.

  3. 3

    Check the preview

    Distance, duration, ascent and average heart rate are shown alongside a map of the converted track, so you can confirm nothing was lost before downloading.

  4. 4

    Download

    Click the download button and the .geojson file is saved straight from memory. Nothing was uploaded, so there is nothing to clean up.

What is a TCX file?

TCX (Training Center XML) is Garmin's older training format, introduced with Garmin Training Center in the mid-2000s and later extended by Strava and others. Like GPX it is XML, but TCX is structured around workouts rather than raw tracks: activities contain laps, laps contain tracks, and the schema natively understands training concepts — total time, distance, calories, heart rate zones and cadence — that plain GPX leaves to extensions.

Today TCX sits between two worlds: modern Garmin devices write FIT, while Strava's uploader still accepts TCX as a first-class citizen and many legacy coaching tools (TrainingPeaks imports, older Polar flows, Golden Cheetah archives) expect it. Converting into or out of TCX is usually about keeping lap structure and summary data intact while crossing between those generations of software.

What is a GeoJSON file?

GeoJSON (RFC 7946) is the JSON dialect of geography — the format the modern web speaks natively. Mapping libraries (Leaflet, Mapbox GL, D3, Deck.gl), data-journalism tools (Datawrapper, Flourish), GIS suites (QGIS, PostGIS) and half the data-science Python stack all consume it without ceremony. A file is a FeatureCollection of geometries, coordinates are written as [longitude, latitude] pairs, and properties ride along as plain JSON.

Like KML, GeoJSON is about geography rather than training. It has no native slots for heart rate or power, though tools freely attach custom properties — the widely used togeojson convention stores per-point timestamps in coordinateProperties.times, which this converter both reads and writes. If the destination is a web map, a dashboard or a data pipeline, GeoJSON is almost always the shortest path.

Why modernize a TCX archive with GeoJSON?

A TCX library is history locked in a training format. GeoJSON unlocks it with the modern toolkit: load a decade of activities into QGIS and ask where you actually ran; serve the tracks as static JSON on a personal site with a Leaflet map; hand a year of rides to a notebook and geopandas for spatial statistics. None of that tooling reads TCX natively; all of it reads GeoJSON without ceremony.

The conversion is structure-aware. TCX activities are built from laps, and each lap becomes its own Feature in the output FeatureCollection — so interval sessions and auto-lapped runs arrive as distinct, filterable line features rather than one blended track. Timestamps, which TCX always carries, are preserved as ISO strings in coordinateProperties.times, the convention web tooling expects.

What survives, what doesn't

Geometry, elevation, timestamps and lap structure all convert faithfully — nothing is resampled or simplified. The output is pretty-printed JSON, friendly to git, editors and diffing, which suits archives that live in repositories.

The honest omission is physiological: heart rate, cadence, power and calories have no GeoJSON representation and are dropped rather than approximated. For spatial questions — where, how far, how often — that costs nothing. For training questions, keep TCX (or convert to GPX/TCX siblings) as the analytical copy.

Your files never leave this browser

This tool — like every tool on this site — runs entirely as client-side JavaScript. The file you drop is parsed in a Web Worker on your own device, converted in memory and handed straight back to you as a download. There is no upload endpoint, no server-side conversion service and no temporary storage: you can watch the network tab in your browser's developer tools and confirm that no file bytes are transmitted anywhere.

That matters more with fitness data than with most files. A GPS track is a precise log of where you were, at what time, and how hard your heart was working — home address, training habits, favorite routes and race schedule all in one file. Keeping conversion on-device means third-party converters never get a copy of that log, and the tool keeps working identically on a plane, in a basement, or anywhere else without signal.

TCX vs GeoJSON at a glance

AspectTCXGeoJSON
Format typeTraining XML (Garmin)JSON (RFC 7946)
Typical useTraining platforms, legacy archivesGIS, web maps, data pipelines
GPS + elevationYesYes (third coordinate)
LapsFirst-class structured lapsOne Feature per lap
TimestampsNativecoordinateProperties.times (ISO)
Best forTraining data fidelitySpatial analysis, web display

Frequently asked questions

Yes — because laps arrive as separate features, QGIS can categorize them by feature order or the name property, letting you highlight intervals versus recovery in one layer.

Related tools