Last active
January 7, 2020 05:14
-
-
Save crissilvaeng/b38f4c1d8644bf3e6012061116a8aa06 to your computer and use it in GitHub Desktop.
nautical tracker (open and parse file)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nao otimizado para fins didaticos.