Skip to content

Instantly share code, notes, and snippets.

Last active September 4, 2022 19:19
What would you like to do?
Extract basic GPS data (lat, lon, elevation, timestamp) from GPX, and dump it into a CSV file. Requires the gpxpy library.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Output Elevation, Lat, Long, and Timestamp series from GPX to CSV
Requires gpxpy
This script expects your input GPX to be located in a subdir named 'data'
import os
import gpxpy
import gpxpy.gpx
import csv
outputdir = "output"
os.path.exists(outputdir) or os.makedirs(outputdir)
# put your GPX file in a subdir named 'data'
gpx_file = open(os.path.join("data", "input.gpx"), "r")
gpx = gpxpy.parse(gpx_file)
except IOError:
print("Couldn't open the input GPX file. Ensure it's in the 'data' dir.")
def write_csv():
""" coroutine for writing dicts to a CSV as rows """
header_written = False
# create a CSV writer object
with open(os.path.join(outputdir, "output.csv"), "w") as f:
while True:
data = (yield)
# don't bother writing anything unless we have GPS data
dw = csv.DictWriter(f, sorted(data.keys()))
if not header_written:
header_written = True
# initialise csv output co-routine
output = write_csv()
# dump each lat/lon/elevation/timestamp into a dict, with a Unix timestamp
for track in gpx.tracks:
for segment in track.segments:
for point in segment.points:
"Lat.": point.latitude,
"Lon.": point.longitude,
"Elev.": point.elevation,
"Timestamp": point.time.isoformat()
Copy link

TiagoCant commented Mar 22, 2018

Thanks @urschrei for sharing your code.
However I recieve this error in message in line 43 and can't finish running the code.
AttributeError: 'generator' object has no attribute 'next'

Any ideas what the problem might be?

Copy link

ZeevoX commented May 4, 2019

@TiagoCant Use python2 instead of python3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment