Skip to content

Instantly share code, notes, and snippets.

@cast42
Created June 18, 2014 12:44
Show Gist options
  • Save cast42/ca2a003f54c7a423788e to your computer and use it in GitHub Desktop.
Save cast42/ca2a003f54c7a423788e to your computer and use it in GitHub Desktop.
Parse GPX file generated by Strava containing heartrate, cadence and temperature
from xml.dom import minidom
import datetime
tracks = {}
def parseTrack(trk):
name = trk.getElementsByTagName('name')[0].firstChild.data
if not name in tracks:
tracks[name] = []
for trkseg in trk.getElementsByTagName('trkseg'):
for trkpt in trkseg.getElementsByTagName('trkpt'):
lat = float(trkpt.getAttribute('lat'))
lon = float(trkpt.getAttribute('lon'))
ele = float(trkpt.getElementsByTagName('ele')[0].firstChild.data)
rfc3339 = trkpt.getElementsByTagName('time')[0].firstChild.data
try:
t = datetime.datetime.strptime(rfc3339, '%Y-%m-%dT%H:%M:%S.%fZ')
except ValueError:
t = datetime.datetime.strptime(rfc3339, '%Y-%m-%dT%H:%M:%SZ')
extensions = trkpt.getElementsByTagName('extensions')[0]
trkPtExtension = extensions.getElementsByTagName('gpxtpx:TrackPointExtension')[0]
if trkPtExtension:
hr = int(trkPtExtension.getElementsByTagName('gpxtpx:hr')[0].firstChild.data)
cad = int(trkPtExtension.getElementsByTagName('gpxtpx:cad')[0].firstChild.data)
if trkPtExtension.getElementsByTagName('gpxtpx:atemp'):
atemp = int(trkPtExtension.getElementsByTagName('gpxtpx:atemp')[0].firstChild.data)
tracks[name].append({'lat':lat, 'lon':lon, 'ele':ele, 'time':t, 'hr':hr, 'cad':cad, 'atemp':atemp})
doc = minidom.parse('ride.gpx')
doc.normalize()
gpx = doc.documentElement
for node in gpx.getElementsByTagName('trk'):
parseTrack(node)
print tracks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment