【问题标题】:Calculate ECEF satellite position from TLE从 TLE 计算 ECEF 卫星位置
【发布时间】:2021-02-10 05:11:52
【问题描述】:

我正在使用 mi 位置(经纬度)计算卫星的位置,我想知道从我的位置可以看到哪些卫星(我的接收器)。为此,我正在使用blog 的帮助,我正在使用 Pyphem,python 库,并使用 TLE 文件的信息。有了这个,我可以知道位置,但我可以通过文件获得的最大数据范围,文件位于this 站点。 例如该文件从 12-01-2017 1:00 到 13-01-2017 23:59 获取信息,我想知道 14-01-2017 13:05 的位置 问题是我明天可以获得 TLE 文件吗?还是我可以得到今天的文件?

更新 1。

my code 在 python 中是这样的:

TimeNow = datetime.datetime.now() #"10/01/2017"
Longitude = -73.1198 
Latitude = 7.11392
print TimeNow

sat_alt, sat_az, sat_name = [], [], []

observer = ephem.Observer()
observer.long = '-73.1224429' # '-37.799423'
observer.lat = '7.1388027' # '144.999979'
observer.date = datetime.datetime.now()

GPS_list = 'http://www.celestrak.com/NORAD/elements/gps-ops.txt'
GPS2_list = 'http://www.tle.info/data/gps-ops.txt'
GLONASS_list = 'http://www.celestrak.com/NORAD/elements/glo-ops.txt'
GLONASS2_list = 'http://www.tle.info/data/glo-ops.txt'
#'http://www.amsat.org/amsat/ftp/keps/current/nasabare.txt').readlines()


tles = urllib2.urlopen(GPS_list).readlines() 

tles = [item.strip() for item in tles]
tles = [(tles[i],tles[i+1],tles[i+2]) for i in xrange(0,len(tles)-2,3)]

for tle in tles:

    try:
        sat = ephem.readtle(tle[0], tle[1], tle[2])
        rt, ra, tt, ta, st, sa = observer.next_pass(sat)

        if rt is not None and st is not None:
            #observer.date = rt
            sat.compute(observer)

            #if 'PRN 26' in tle[0]:
                #print "TRUE"
            if TimeNow <= ephem.localtime(st) and TimeNow >= ephem.localtime(rt):
                text = tle[0]
                sat_alt.append(np.rad2deg(sat.alt))
                sat_az.append(np.rad2deg(sat.az))

                text2 = text.rsplit(')', 1)[0]
                text3 = text2.rsplit('(', 1)[1]
                sat_name.append(text3)
                print text3, np.rad2deg(ra),np.rad2deg(sa)
    except ValueError as e:
        print e

结果:

PRN 19 228.755917041 148.703886987
PRN 02 221.648736379 143.285115427
PRN 17 221.556446863 146.188232693
PRN 30 322.13237575 60.4800956664
PRN 06 211.849518618 131.038791151

在这个例子中,我有今天 (28/02/2017) 的信息我在链接中我有今天的 TLE 文件,但如果我想要明天的信息?

谢谢

更新 2:

您可以将变量 TimeNow 更改为另一个日期(例如 now + 2 hours),但如果使用今天的 TLE 文件我尝试计算明天,还是明天过去,误差会不会太大?多少钱? (我正在阅读this 试图找到答案)我希望有人知道。谢谢。

【问题讨论】:

  • 具体来说,您在哪里获得 12-01-2017 1:00 到 13-01-2017 23:59 的值?我没有在您链接到的文件中看到那些 - 您能否显示您用于获取这些特定日期和时间的代码?谢谢!
  • 谢谢布兰登,我更新了问题;通过链接,我有今天的信息,但如果我想知道明天卫星的位置?我怎样才能得到那个文件?谢谢。

标签: python pyephem


【解决方案1】:

如果我理解您的问题,您想在一段时间内从其 TLE 获取卫星的位置,那么您可以使用 sgp4 库获取卫星 TLE 的笛卡尔坐标:

pip 安装 sgp4

从 sgp4.api 导入 Satrec

从 sgp4.api 导入 jday

然后将第一行 TLE 行放入变量 s 中,第二行放入变量 t 中,如下所示:

s = '1 25544U 98067A 21035.51324206 .00001077 00000-0 27754-4 0 9998'

t = '2 25544 51.6455 278.9410 0002184 336.6191 80.6984 15.48940116268036'

卫星 = Satrec.twoline2rv(s, t)

然后你选择你想要的日期,(年、月、日、小时、分钟、秒),如下所示:

jd, fr = jday(2021, 2, 4, 18, 5, 0)

e, r, v = 卫星.sgp4(jd, fr)

你得到了笛卡尔坐标中的错误“e”、位置向量“r”和速度向量“v”。

https://josephinepicot.medium.com/get-the-cartesian-position-velocity-vectors-of-a-satellite-at-a-given-time-from-a-tle-60d29e31c422

现在,如果您的卫星是地球静止的,很容易知道它第二天的位置,但如果不是,您也许可以用之前的位置向量绘制时间序列...

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多