- Home
- GeoJSON to KML Converter
100% private — files never leave your browser
GeoJSON to KML Converter
Turn .geojson line features into .kml files that open in Google Earth with a double-click — routes draped over real terrain, timestamps preserved as gx:Track for time-slider playback. The conversion runs entirely on your device.
How to convert to KML
- 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
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
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
Download
Click the download button and the .kml file is saved straight from memory. Nothing was uploaded, so there is nothing to clean up.
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.
What is a KML file?
KML (Keyhole Markup Language) is the XML dialect born inside Keyhole — the software that became Google Earth — and later standardized by the OGC. It describes geographic features for display: placemarks, lines, polygons and images, each with the styling and folders that make a KML file read like a curated map rather than a raw data dump. Google Earth, Google My Maps and most desktop GIS packages open it natively.
KML is a mapping format, not a training format. Its geometry carries position and elevation well — and Google's gx:Track extension can even carry per-point timestamps for time-slider playback — but it has no concept of heart rate, cadence or power. Converting an activity to KML is the right move when the goal is showing a route to humans; when the goal is analyzing a workout, the fitness formats are the right home for the data.
Why take GeoJSON into Google Earth?
Data pipelines produce GeoJSON; humans browse in Google Earth. A route computed for a story map, a trail dataset from a GIS project, tracks collected by a field tool — render them in Earth and they gain terrain, 3D tilt and the most familiar map interface there is. For sharing with non-technical audiences, 'open this in Earth' remains the lowest-friction instruction in mapping.
Earth is also a surprisingly good inspection tool for GeoJSON data: drop the converted KML next to Earth's satellite imagery and data problems jump out — a line snapped to the wrong side of a valley, a segment wandering through a lake — in a way that a web map's default styling rarely makes obvious.
What the output looks like
Every line feature becomes a placemark in a single KML document: LineStrings and each line of a MultiLineString become their own placemark, in order. Feature names (from properties) become placemark names — visible in Earth's Places panel. Elevation in your third coordinate carries across, and when the source has coordinateProperties.times, the output is written as gx:Track so the time slider works.
Honest notes: GeoJSON properties beyond the name are data with no KML display meaning and are dropped; points and polygons aren't line geometry and are skipped. What you get is the clean, standard KML 2.2 Earth expects — geometry, elevation, names, time.
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.
GeoJSON vs KML at a glance
| Aspect | GeoJSON | KML |
|---|---|---|
| Format type | JSON (RFC 7946) | Display XML (Google Earth) |
| Typical use | Web maps, GIS, pipelines | Earth visualization, sharing |
| Line geometry | LineString / MultiLineString | LineString / gx:Track placemarks |
| Timestamps | coordinateProperties.times | gx:Track <when> |
| Properties | Arbitrary JSON | Names only |
| Best for | Data and rendering | Human browsing in 3D |
Frequently asked questions
Yes, if your GeoJSON carries per-point times in coordinateProperties.times — the converter writes gx:Track in that case and Earth plays the track back. GeoJSON without times becomes a plain LineString, which renders identically minus the playback.