MetHorn

Habitica July 2020 Challenge Openskies

Jul 3rd, 2020
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. '''Solution to Challenge: https://www.reddit.com/r/dailyprogrammer/comments/8i5zc3/20180509_challenge_360_intermediate_find_the/'''
  2.  
  3. import math
  4. import requests
  5. import json
  6. import logging
  7. import argparse
  8. import sys
  9.  
  10. # DEBUG switch
  11. DEBUG = True
  12.  
  13. # if DEBUG is set -> enable logging
  14. if DEBUG:
  15.     logging.basicConfig(level=logging.DEBUG, format='%(message)s')
  16. else:
  17.     logging.disable(logging.CRITICAL)  # disable logging here
  18.  
  19. # init argparse
  20. parser = argparse.ArgumentParser()
  21. parser.add_argument('latitude', action='store', type=float, help='Input latitude, e.g. 47.8229')
  22. parser.add_argument('longitude', action='store', type=float, help='Input longitude, e.g. 5.9962')
  23.  
  24. # if DEBUG is set -> use local test coordinates, else use argvars
  25. if DEBUG:
  26.     #args = parser.parse_args(['46.8359', '7.5001'])    # swiss
  27.     args = parser.parse_args(['48.8584', '2.2945'])    # eifel tower
  28.     #args = parser.parse_args(['40.6513', '73.7781'])     # jfk airport
  29.  
  30.     logging.debug(args.latitude)
  31.     logging.debug(args.longitude)
  32.  
  33. else:
  34.     args = parser.parse_args(sys.argv[1:])
  35.  
  36. print('Requesting data!\nPlease wait...')
  37.  
  38. # prepare api link for getting airplane data
  39. OS_API = 'https://opensky-network.org/api/states/all'
  40.  
  41. # load airplanes data in json format via api-request
  42. airplanes = json.loads(requests.get(OS_API).content)
  43.  
  44. if airplanes['states'] is None: # if no planes were found
  45.     print('No planes were found!!!')
  46.     exit()
  47.  
  48. closest_distance = 10**10
  49. for airplane in airplanes['states']:
  50.     if airplane[5] is not None and airplane[6] is not None:
  51.         euklidian_distance = math.sqrt((args.latitude - airplane[6])**2 + (args.longitude - airplane[5])**2)
  52.         if euklidian_distance < closest_distance:
  53.             closest_distance = euklidian_distance
  54.             closest_airplane = airplane
  55.             logging.debug(f'dist: {closest_distance}')
  56.             logging.debug(f'plane: {closest_airplane}')
  57.  
  58. logging.debug('-----')
  59. print(f'Closest Airplane to coordinate {args.latitude}, {args.longitude} is:')
  60. print(f'ICAO24 ID:\t{closest_airplane[0]}')
  61. print(f'Callsign:\t{closest_airplane[1]}')
  62. print(f'Origin:\t\t{closest_airplane[2]}')
  63. print(f'Euklid. dist.:\t{closest_distance:.6}')
  64. print(f'Latitude:\t{closest_airplane[6]}')
  65. print(f'Longitude:\t{closest_airplane[5]}')
  66. print(f'Altitude:\t{closest_airplane[13]}')
  67. print(f'Velocity:\t{closest_airplane[9]}')
Add Comment
Please, Sign In to add comment