从 TLE 文件中获取卫星的笛卡尔位置向量(两个线元素)

Get the cartesian position vector of a satellite from a TLE file (two line elements)

我有一个与卫星关联的 TLE 文件(包含其开普勒坐标:TLE_description 例如偏心率(度)、近地点角(度)、纪元(year_month_day hour:min:sec ) 等等。看起来像这样:

'''国际空间站(查莉娅)
1 25544U 98067A 14273.50403866 .00012237 00000-0 21631-3 0 1790 2 25544 51.6467 297.5710 0002045 126.1182 27.2142 15.50748592907666 我附上了一张照片,其中显示了 TLE 中每个值的名称。'''

从这个 TLE 文件中,我想在卫星定位中获得卫星的笛卡尔位置矢量(X、Y、Z)。

为此,我尝试使用 beyond 库(来自 beyond.io.tle import Tle ;来自 beyond.frames import create_station)来获取一些开普勒数据,(方位角、仰角、distance_from_the_station) 但是所有这些数据都是相对于一个站点计算的,所以这不是卫星的位置向量而是一个向量 (azimut_station_to_satellite, elevation_station_to_satellite, distance_station_to_satellite)我无法从中获得位置向量。但是因为我可以有一个向量,所以我确信有一种方法可以直接从卫星的 TLE 文件中获取卫星的位置。

如果有需要,我可以添加代码! 感谢阅读。

我终于弄明白了,这是答案: 我有一个像这样的 TLE :

'1 28446U 04041A 19002.21559949 -.00000090 00000-0 00000+0 0 9998 2 28446 0.0198 37.5572 0002596 225.6438 170.9111 1.00271812 52071'

要获得我的卫星在笛卡尔坐标系中的位置 and/or 速度矢量,我只需要做:

from sgp4.api import Satrec
from sgp4.api import jday

s = '1 28446U 04041A   19002.21559949 -.00000090  00000-0  00000+0 0  9998'
t = '2 28446   0.0198  37.5572 0002596 225.6438 170.9111  1.00271812 52071'
satellite = Satrec.twoline2rv(s, t)

jd, fr = jday(2019, 1, 1, 11, 59, 33) # I pick an epoch (close to the TLE's)
e, r, v = satellite.sgp4(jd, fr) # e = error, r = position vector, v = speed vector

如果 e = 0 没有问题,否则您将获得错误的索引。 感谢 Brandon Rhodes!