Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''Solution to Challenge: https://www.reddit.com/r/dailyprogrammer/comments/8i5zc3/20180509_challenge_360_intermediate_find_the/'''
- import math
- import requests
- import json
- import logging
- import argparse
- import sys
- # DEBUG switch
- DEBUG = True
- # if DEBUG is set -> enable logging
- if DEBUG:
- logging.basicConfig(level=logging.DEBUG, format='%(message)s')
- else:
- logging.disable(logging.CRITICAL) # disable logging here
- # init argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('latitude', action='store', type=float, help='Input latitude, e.g. 47.8229')
- parser.add_argument('longitude', action='store', type=float, help='Input longitude, e.g. 5.9962')
- # if DEBUG is set -> use local test coordinates, else use argvars
- if DEBUG:
- #args = parser.parse_args(['46.8359', '7.5001']) # swiss
- args = parser.parse_args(['48.8584', '2.2945']) # eifel tower
- #args = parser.parse_args(['40.6513', '73.7781']) # jfk airport
- logging.debug(args.latitude)
- logging.debug(args.longitude)
- else:
- args = parser.parse_args(sys.argv[1:])
- print('Requesting data!\nPlease wait...')
- # prepare api link for getting airplane data
- OS_API = 'https://opensky-network.org/api/states/all'
- # load airplanes data in json format via api-request
- airplanes = json.loads(requests.get(OS_API).content)
- if airplanes['states'] is None: # if no planes were found
- print('No planes were found!!!')
- exit()
- closest_distance = 10**10
- for airplane in airplanes['states']:
- if airplane[5] is not None and airplane[6] is not None:
- euklidian_distance = math.sqrt((args.latitude - airplane[6])**2 + (args.longitude - airplane[5])**2)
- if euklidian_distance < closest_distance:
- closest_distance = euklidian_distance
- closest_airplane = airplane
- logging.debug(f'dist: {closest_distance}')
- logging.debug(f'plane: {closest_airplane}')
- logging.debug('-----')
- print(f'Closest Airplane to coordinate {args.latitude}, {args.longitude} is:')
- print(f'ICAO24 ID:\t{closest_airplane[0]}')
- print(f'Callsign:\t{closest_airplane[1]}')
- print(f'Origin:\t\t{closest_airplane[2]}')
- print(f'Euklid. dist.:\t{closest_distance:.6}')
- print(f'Latitude:\t{closest_airplane[6]}')
- print(f'Longitude:\t{closest_airplane[5]}')
- print(f'Altitude:\t{closest_airplane[13]}')
- print(f'Velocity:\t{closest_airplane[9]}')
Add Comment
Please, Sign In to add comment