Skip to main content

Convert Garmin GPX file to CSV

Project description

GPX to CSV conversion (or to a Python list)

This tool can convert most gpx files to csv format. It preserves trackpoint extensions and trk level tags. It should support multiple <trk> entries per file, multiple <trkseg> segments. trk and trkseg specific tags should be added as columns to the final csv file distinguishing the different tracks from each other.

The module uses the GPX tags as column names. It should be able to process any gpx file, not just ones with specific data. If a gpx file uses extensions and has hr for heartrate data, it will make a csv with a hr column.

However, column names will simply reflect how they are tagged in the gpx file. Column ordering may be suboptimal, currently I'm simply sorting it alphabetically, so latitude and longitude may not be adajacent.

Requires lxml and python 3.6+

Installation and Usage

  1. Pip install
pip install gpxcsv

Or clone and install module

git clone https://github.com/astrowonk/gpxcsv.git
cd gpxcsv
python setup.py install
  1. Use directly with command line tool or as a python module. The following examples will create myrun.csv
gpxcsv myrun.gpx
python -m myrun.gpx

Or specify an output file name

gpxcsv myrun.gpx -o myfirstrun.csv
  1. Use the gpxtolist function to read the gpx file into a python list suitable for conversion into a pandas dataframe in a notebook or iPython.
from gpxcsv import gpxtolist
gpx_list = gpxcsv('myfile.gpx')

#if you have pandas
import pandas as pd
df = pd.DataFrame(gpx_list)

Test CSV files

I tested the conversion against a handful of my own GPX files (exported from Apple Health / Apple Watch via the excellent HealthFit app).

In addition I used several files from this sample-gpx repository, specifically:

  • bogus_basin.gpx
  • Alt_Portsmouth.gpx
  • MoselradwegAusWiki.gpx
  • VoieVerteHauteVosges.gpx

as well as all the test files from gpxpy. Many of those intentionally lack any coherent flow of trk -> trkseg -> trkpt so they don't produce a valid csv file.

The bogus_basin file is a good example of conversion of multiple trk files. Though, the design case was more a single workout tracked with an Apple Watch (as that's the data I'm interested in myself.)

Example Input and Output:

Here the beginning of a tkpt from a HealthFit/Apple HealthKit tracked run, with gps coords altered.

<trk>
<type>running</type>
<trkseg>
<trkpt lat="45.0000" lon="-75.0000">
    <ele>51.0000</ele>
    <time>2021-07-21T12:37:41.000Z</time>
    <extensions>
        <gpxtpx:TrackPointExtension>
            <gpxtpx:atemp>24</gpxtpx:atemp>
            <gpxtpx:cad>72</gpxtpx:cad>
            <gpxtpx:speed>2.147612</gpxtpx:speed>
            <gpxtpx:hAcc>6.406485</gpxtpx:hAcc>
            <gpxtpx:vAcc>5.718293</gpxtpx:vAcc>
        </gpxtpx:TrackPointExtension>
    </extensions>
...

This produces a CSV that begins:

atemp,cad,course,ele,hAcc,hr,lat,lon,speed,time,type,vAcc
24.0,72.0,,51.0,6.406485,,45.0,-75.0,2.147612,2021-07-21T12:37:41.000Z,running,5.718293

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

gpxcsv-0.2.2-py3-none-any.whl (5.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page