Skyfield:在给定时间间隔内以1秒周期性实现sgp4结果

3
我已使用Python中的Skyfield实现了sgp4算法。
我需要得到1天时间间隔内,每秒周期的位置向量。为此,我必须重复计算sgp4,每次加上1秒。
有没有一种方法可以返回一个包含所有位置的向量?
2个回答

3

令人高兴的是,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)

目前这段代码并不特别快,因为地球卫星计算尚未优化,但应该比在循环中手动构建多个时间对象要快。


1
你可以通过从TLE创建一个skyfield.EarthSatellite对象,然后为时间列表中的每个时间生成astrometric对象来实现此操作。您需要将时区感知日期时间对象指定为时间列表。您可以使用以下方式创建时间列表(可能有很多提高效率的空间):
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)

并使用以下代码进行评估:

astrometrics = my_earthsat.at(ts.utc(times))

这将为您提供指定时间的星表列表。您可以使用这些对象以任何单位或参考系获取您的对象的位置(我认为还可以获取速度)。您可以使用类似以下方式来获取列表中每个元素的弧度高度和方位角:
alt_az = []
for ast in astrometrics:
    alt_az.append(ast.altaz().radians)

您还要在循环中重复计算位置。是否有可能在一次计算中获取所有位置? - Leeloo
抱歉,我做了一个更正。无论如何,您都必须在循环中进行计算。问题在于循环是优化的还是裸的Python循环。通过将日期作为列表传递给my_earthsat.at(),您可以获得更优化的循环。我不确定它是否会转移到C中的某些内容。 - Engineero
@Leeloo,这听起来像是您的时间向量没有正确初始化。如果您打印times,会看到什么? - Engineero
1
如果您需要GCRS中的位置,恐怕我认为没有更快的实现方式了。如果您对TEME或ITRF坐标感兴趣,或者希望在循环多个具有相同时间列表的 skyfield.EarthSatellite 对象时加速,我已经在Skyfield Github上发布了一些思路。请参考链接:https://github.com/skyfielders/python-skyfield/issues/188 - dsholes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接