Skyfield:在给定时间内以1秒周期获得sgp4结果

2024-10-05 13:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中使用Skyfield实现了sgp4算法。在

我需要1天时间间隔和1秒周期的位置向量。为此,我必须反复计算sgp4,每次加1秒。在

有没有办法返回一个包含所有位置的向量?在


Tags: 算法间隔时间向量skyfield办法sgp4
2条回答

幸运的是,Skyfield是为NumPy数组的时间对象而设计的,它将生成与数组中的对象一样多的位置。以下是描述该功能的文档部分:

http://rhodesmill.org/skyfield/time.html#date-arrays

下面是一个完成您描述的任务的示例:

from numpy import arange
from skyfield.api import load, EarthSatellite

iss_tle0 = """\
1 25544U 98067A   18184.80969102  .00001614  00000-0  31745-4 0  9993
2 25544  51.6414 295.8524 0003435 262.6267 204.2868 15.54005638121106
"""
my_earthsat = EarthSatellite(*iss_tle0.splitlines())

tz_offset = -4

ts = load.timescale()
t = ts.utc(2018, 6, 21, tz_offset, 0, arange(24 * 60 * 60))
astrometrics = my_earthsat.at(t)

这段代码目前不是特别快,因为地球卫星的计算还有待优化,但应该比在一个循环中手动构建多个时间对象更快。在

您可以通过创建一个^{}对象作为TLE,然后在一个时间列表中为每次生成^{}对象。您需要将时间列表指定为支持时区的datetime对象。你可以用这样的方法创建你的时间列表(可能有很大的空间来提高效率):

from datetime import timezone, timedelta, datetime
from skyfield.api import load

ts = load.timescale()  # create skyfield timescale object
tz = timezone(timedelta(hours=-4))  # whatever your timezone offset from UTC is
start = datetime(2018, 06, 21, 0, 0, 0, tzinfo=tz)  # timezone-aware start time
end = start + timedelta(hours=24)  # one day's worth of times
delta = timedelta(minutes=1)  # your interval over which you evaluate
times = [start]
now = start
while now <= end:
    now += delta
    times.append(now)

并用以下方法进行评估:

^{pr2}$

这将在你指定的每一次给你一个天体测量的列表。你可以用这些物体来得到物体的位置(我想是速度),在你喜欢的任何单位或参考系里。例如,可以通过以下方式获取列表中每个元素的高度和方位角(以弧度为单位):

alt_az = []
for ast in astrometrics:
    alt_az.append(ast.altaz().radians

相关问题 更多 >

    热门问题