Skip to content

Instantly share code, notes, and snippets.

@crissilvaeng
Last active January 7, 2020 05:14
Show Gist options
  • Save crissilvaeng/b38f4c1d8644bf3e6012061116a8aa06 to your computer and use it in GitHub Desktop.
Save crissilvaeng/b38f4c1d8644bf3e6012061116a8aa06 to your computer and use it in GitHub Desktop.
nautical tracker (open and parse file)
import math
import argparse
import itertools
import statistics
COORDINATE_INDEX = 1
SPEED_INDEX = 3
parser = argparse.ArgumentParser(description='Nautical Tracker')
parser.add_argument('-f', '--filename', required=True, type=str, help='path to file')
def calculate_distance_between(x, y):
(latitude_x, longitude_x) = x
(latitude_y, longitude_y) = y
delta_latitude = latitude_y - latitude_x
latitude_mean = (latitude_x + latitude_y) / 2
delta_longitude = longitude_y - longitude_x
ap = delta_longitude * math.cos(math.radians(latitude_mean))
return 60 * math.sqrt(delta_latitude ** 2 + ap **2)
def parse_content(record):
fields = record.split(',')
return list([
int(fields[0]), # time in seconds
(float(fields[1]), float(fields[2])), # coordinates in degrees (latitude, longitude)
float(fields[3]), # route in degrees
float(fields[4]), # speed in knots
])
def main(filename):
with open(filename) as f:
content = f.read().splitlines()
records = list(map(parse_content, content))
distance = 0
for x, y in zip(records, records[1:]):
distance += calculate_distance_between(x[COORDINATE_INDEX], y[COORDINATE_INDEX])
print('Cálculo da distância percorrida pelo navio: {}'.format(distance))
speeds = list(map(lambda record: record[SPEED_INDEX], records))
speed_mean = statistics.mean(speeds)
print('Cálculo da velocidade média da viagem: {}'.format(speed_mean))
if __name__ == '__main__':
args = parser.parse_args()
main(args.filename)
@crissilvaeng
Copy link
Author

Nao otimizado para fins didaticos.

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