Guest User

letsrun_parse.py

a guest
Mar 12th, 2024
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. import csv
  2. import json
  3. import geopy.distance
  4. import gpxpy
  5. import sys
  6.  
  7. try:
  8.     full_filename = sys.argv[1]
  9. except:
  10.     print("USAGE: python letsrun_parse.py <gpx filename>")
  11.     sys.exit(1)
  12.  
  13. filename = full_filename.split('.')[0]
  14.  
  15. data = open(f'{filename}.json', 'r').read()
  16. obj = json.loads(data)
  17.  
  18. with open(f'{filename}.gpx', 'r') as fh:
  19.     gpx = gpxpy.parse(fh)
  20.  
  21. json_keys = ['time','timer_time','grade_smooth','grade_adjusted_distance','distance','cadence','heartrate']
  22. headers = ['time','timer_time','grade_smooth','grade_adjusted_distance','distance','cadence','heartrate','latitude','longitude','elevation','speed','pace']
  23.  
  24. print("GPX TRACK POINTS:", gpx.get_track_points_no())
  25. total_time = gpx.get_track_points_no() / 60 / 60
  26. print("TOTAL TIME IN HOURS:", total_time)
  27.  
  28. for h in json_keys:
  29.     print(h, len(obj[h]))
  30.  
  31.  
  32. data = []
  33. i = 0
  34. for track in gpx.tracks:
  35.     for segment in track.segments:
  36.         for point_no, point in enumerate(segment.points):
  37.             line = []
  38.  
  39.             speed_mph = 0.0
  40.             pace = "00:00"
  41.             if point_no > 0:
  42.                 prev_point = segment.points[point_no - 1]
  43.  
  44.                 coords_1 = (prev_point.latitude, prev_point.longitude)
  45.                 coords_2 = (point.latitude, point.longitude)
  46.                 distance = geopy.distance.geodesic(coords_1, coords_2).miles
  47.                 miles_per_min = distance
  48.                 speed_mph = miles_per_min * 60 * 60
  49.  
  50.                 if int(speed_mph) != 0:
  51.                     miles_per_minute = speed_mph / 60
  52.                     minutes_per_mile = 1 / miles_per_minute
  53.                     minutes = int(minutes_per_mile)
  54.                     seconds = int((minutes_per_mile - minutes) * 60)
  55.  
  56.                     pace = "{:02}:{:02}".format(minutes, seconds)
  57.  
  58.             for k in json_keys:
  59.                 line.append(obj[k][i])
  60.  
  61.             line.append(point.latitude)
  62.             line.append(point.longitude)
  63.             line.append(point.elevation)
  64.             line.append(speed_mph)
  65.             line.append(pace)
  66.  
  67.             data.append(line)
  68.  
  69.             #if obj['heartrate'][i] < 100 and speed_mph > 6.0:
  70.             #    print("HEARTRATE ALERT:", line)
  71.  
  72.             #if obj['cadence'][i] < 10 and speed_mph > 6.0:
  73.             #    print("CADENCE ALERT:", line)
  74.  
  75.             if speed_mph > 12.0:
  76.                 print("SPEED ALERT:", line)
  77.  
  78.             i += 1
  79.  
  80. with open(f'{filename}.csv','w') as fh:
  81.     csv_writer = csv.writer(fh)
  82.     csv_writer.writerow(headers)
  83.  
  84.     for row in data:
  85.         csv_writer.writerow(row)
  86.  
Advertisement
Add Comment
Please, Sign In to add comment