No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

58 líneas
1.9KB

  1. #!/usr/bin/env python3
  2. from argparse import ArgumentParser
  3. from time import sleep
  4. import pandas as pd
  5. import csv
  6. from datetime import datetime
  7. import math
  8. if __name__ == "__main__":
  9. parser = ArgumentParser()
  10. parser.add_argument("-f", "--file", required=True, help="NMEA file.")
  11. args = parser.parse_args()
  12. epoch = datetime.utcfromtimestamp(0)
  13. outputfile = open(args.file.replace("nmea", "csv"), "w")
  14. writer = csv.writer(outputfile, delimiter=",", lineterminator="\n")
  15. writer.writerow(
  16. ["datetime", "time_epoch", "latitude", "longitude", "speed (knots)", "systime_epoch"]
  17. )
  18. csv_string = ""
  19. for line in open(args.file, "r").readlines():
  20. if line.startswith("$GPRMC"):
  21. row = line.split(",")
  22. time = row[1]
  23. lat = row[3]
  24. lat_direction = row[4]
  25. lon = row[5]
  26. lon_direction = row[6]
  27. speed = row[7]
  28. date = row[9]
  29. systime_epoch = row[13] if len(row) < 14 else 0
  30. date_and_time = datetime.strptime(date + " " + time, "%d%m%y %H%M%S.%f")
  31. time_since_epoch = date_and_time.timestamp()
  32. date_and_time = date_and_time.strftime("%y-%m-%d %H:%M:%S.%f") # [:-3]
  33. lat = round(math.floor(float(lat) / 100) + (float(lat) % 100) / 60, 6)
  34. if lat_direction == "S":
  35. lat = lat * -1
  36. lon = round(math.floor(float(lon) / 100) + (float(lon) % 100) / 60, 6)
  37. if lon_direction == "W":
  38. lon = lon * -1
  39. writer.writerow([date_and_time, time_since_epoch, lat, lon, speed, systime_epoch])
  40. outputfile.close()
  41. sleep(1)
  42. gps_df = pd.read_csv(args.file.replace("nmea", "csv"))
  43. #gps_df["datetime"] = pd.to_datetime(
  44. # gps_df["systime_epoch"].apply(lambda x: datetime.fromtimestamp(x))
  45. #)
  46. gps_df.to_csv(args.file.replace("nmea", "csv"))