我正在尝试根据其 TLE 计算给定卫星的近地点和远地点
from skyfield.api import Topos, EarthSatellite
ts = load.timescale()
# latest TLE as of this morning, epoch is epoch=2020-08-24T12:30:01Z
line=['0 ISS (ZARYA)',
'1 25544U 98067A 20237.52084486 .00016717 00000-0 10270-3 0 9031',
'2 25544 51.6430 10.2947 0001353 63.6269 296.5020 15.49179055 2606']
satellite = EarthSatellite(line[1], line[2], line[0], ts)
t = ts.utc(2020, 8, 24, 12, range(30,123)) #epoch + a full orbit
geocentric = satellite.at(t)
subpoint = geocentric.subpoint()
print(f"max {max(subpoint.elevation.km)}")
print(f"min {min(subpoint.elevation.km)}")
这产生了 437.7 的远地点和 418.5 的近地点。近地点看起来正确,但远地点看起来太高了约 17 公里。
以为我读错了文档,我还尝试计算沿途的地心距离并得到相同的结果(到 7 个位置)
difference = satellite - bluffton
topocentric = difference.at(t)
alt, az, distance = topocentric.altaz()
print(f"max {max(distance.km)}")
print(f"min {min(distance.km)}")
这会在小数点后 7 位内产生相同的结果。
在 TLE 的时代,更多地手动执行此操作:
revs_per_day = 15.49179055
eccentricity = 0.0001353
earth_equatorial_radius = 6378.14
period_hrs = 24.0 / revs_per_day
range = (6028.9 * (period_hrs * 60))** (2 / 3)
perigee = range * (1 + eccentricity) - earth_equatorial_radius
产生了420.02公里的远地点和418.18公里的近地点,这更符合我的预期。
我究竟做错了什么?我不明白 Skyfield 的距离代表什么吗?