Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv
- import json
- import geopy.distance
- import gpxpy
- import sys
- try:
- full_filename = sys.argv[1]
- except:
- print("USAGE: python letsrun_parse.py <gpx filename>")
- sys.exit(1)
- filename = full_filename.split('.')[0]
- data = open(f'{filename}.json', 'r').read()
- obj = json.loads(data)
- with open(f'{filename}.gpx', 'r') as fh:
- gpx = gpxpy.parse(fh)
- json_keys = ['time','timer_time','grade_smooth','grade_adjusted_distance','distance','cadence','heartrate']
- headers = ['time','timer_time','grade_smooth','grade_adjusted_distance','distance','cadence','heartrate','latitude','longitude','elevation','speed','pace']
- print("GPX TRACK POINTS:", gpx.get_track_points_no())
- total_time = gpx.get_track_points_no() / 60 / 60
- print("TOTAL TIME IN HOURS:", total_time)
- for h in json_keys:
- print(h, len(obj[h]))
- data = []
- i = 0
- for track in gpx.tracks:
- for segment in track.segments:
- for point_no, point in enumerate(segment.points):
- line = []
- speed_mph = 0.0
- pace = "00:00"
- if point_no > 0:
- prev_point = segment.points[point_no - 1]
- coords_1 = (prev_point.latitude, prev_point.longitude)
- coords_2 = (point.latitude, point.longitude)
- distance = geopy.distance.geodesic(coords_1, coords_2).miles
- miles_per_min = distance
- speed_mph = miles_per_min * 60 * 60
- if int(speed_mph) != 0:
- miles_per_minute = speed_mph / 60
- minutes_per_mile = 1 / miles_per_minute
- minutes = int(minutes_per_mile)
- seconds = int((minutes_per_mile - minutes) * 60)
- pace = "{:02}:{:02}".format(minutes, seconds)
- for k in json_keys:
- line.append(obj[k][i])
- line.append(point.latitude)
- line.append(point.longitude)
- line.append(point.elevation)
- line.append(speed_mph)
- line.append(pace)
- data.append(line)
- #if obj['heartrate'][i] < 100 and speed_mph > 6.0:
- # print("HEARTRATE ALERT:", line)
- #if obj['cadence'][i] < 10 and speed_mph > 6.0:
- # print("CADENCE ALERT:", line)
- if speed_mph > 12.0:
- print("SPEED ALERT:", line)
- i += 1
- with open(f'{filename}.csv','w') as fh:
- csv_writer = csv.writer(fh)
- csv_writer.writerow(headers)
- for row in data:
- csv_writer.writerow(row)
Advertisement
Add Comment
Please, Sign In to add comment