我正在计算使用mi位置(纬度 - 经度)的卫星位置,我想知道从我的位置可以看到哪些卫星(我的接收器)。为此,我使用了这个blog的帮助,我正在使用 Pyphem ,python库,并使用 TLE 文件的信息。有了这个,我可以知道位置,但我可以获得最大的文件范围,文件在this站点。 例如该文件获取信息从12-01-2017 1:00到13-01-2017 23:59,我想知道14-01-2017 13:05的位置 问题是我明天可以获得TLE文件吗?或者只是我可以获取今天的文件?
更新1。
python中的my code是:
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
在这个问题中,我有今天的信息(2017年2月28日)我在链接中有今天的TLE文件,但如果我想要明天的信息?
谢谢
更新2:
您可以将变量TimeNow
更改为另一个日期(例如now + 2 hours
),但是如果使用今天的TLE文件我尝试计算位置(海拔高度),我不会发现错误是怎么回事/ azimuth)明天或明天过去,错误会太大?多少? (我正在阅读this试图找到答案)我希望有人知道。谢谢。
答案 0 :(得分:0)
如果我理解您的问题,您想在一段时间内从其 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”。
现在,如果您的卫星是地球同步的,很容易知道它第二天的位置,但如果不是,您也许可以用之前的位置向量绘制时间序列...
希望有帮助!