Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2021
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1.     import numpy as np
  2.     import matplotlib.pyplot as plt
  3.     from skyfield.api import Loader, EarthSatellite
  4.  
  5.     two = """1 48413U 21038BN  21132.52488535  .00253791  39528-4  39172-3 0  9996
  6.    2 48413  53.0519   5.2321 0014496 204.7636 155.2701 16.03554980  1249"""
  7.  
  8.     L1, L2 = two.splitlines()
  9.  
  10.     earth_radius_km = 6378.137
  11.  
  12.     load  = Loader('~/Documents/fishing/SkyData')  # single instance for big files
  13.  
  14.     sat = EarthSatellite(L1, L2, '48413')
  15.     ts = load.timescale()
  16.     epoch = sat.epoch.tt
  17.     t = ts.tt_jd(np.linspace(epoch, epoch + 0.08, 1000))
  18.  
  19.     g = sat.at(t)
  20.     valid = [m is None for m in g.message]
  21.  
  22.     timez = t.utc_datetime()
  23.     altitude = np.where(valid, g.distance().km - earth_radius_km, np.nan)
  24.     i_apo, i_peri = [np.argmax(a) for a in (altitude, -altitude)]
  25.     apo, peri = [altitude[i] for i in (i_apo, i_peri)]
  26.     t_apo, t_peri = [timez[i] for i in (i_apo, i_peri)]
  27.     apo_label, peri_label = [str(round(alt, 1)) for alt in (apo, peri)]
  28.     a_approx = 0.5 * (apo + peri)
  29.     print('a_approx: ', a_approx)
  30.  
  31.     fig, ax = plt.subplots(1, 1)
  32.  
  33.     ax.set_title(sat.name + ' altitude @ epoch' + sat.epoch.ut1_strftime())
  34.  
  35.     ax.plot(timez, altitude)
  36.  
  37.     ax.text(timez[20], altitude[0], 'epoch', verticalalignment='center', fontsize=12)
  38.     ax.plot(timez[:1], altitude[:1], 'or')
  39.  
  40.     ax.text(t_apo, apo, apo_label, verticalalignment='bottom', fontsize=12)
  41.     ax.plot(t_apo, apo, 'ok')
  42.  
  43.     ax.text(t_peri, peri, peri_label, verticalalignment='top', fontsize=12)
  44.     ax.plot(t_peri, peri, 'ok')
  45.  
  46.     ax.plot(timez, np.full_like(altitude, a_approx), '-k')
  47.     a_approx_text = str(round(a_approx, 1))
  48.     ax.text(timez[0], a_approx, a_approx_text,
  49.             verticalalignment='bottom', fontsize=12)
  50.  
  51.     plt.show()
  52.  
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement