从 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!
我有一个与卫星关联的 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!