问题标签 [skyfield]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 Skyfield 的月球节点经度
我正在尝试使用 Skyfield 找出上升/下降月球节点的经度,但无法在文档中找到任何参考。可能吗?是否有任何 JPL 文件已经提供了这些数据?
python - Skyfield.api 加载器在 docker 容器中的行为不同
我希望向 Skyfield 指定一个下载目录,如此处所述:
http://rhodesmill.org/skyfield/files.html
这是我的脚本:
预期行为(在 docker 外工作正常)
3 个 deltat 文件(deltat.data、deltat.preds和Leap_Second.dat)下载到~/data/skyfield和stations.txt下载到同一个load.timescale()
地方load.tle(stations_url)
在容器中运行时的行为
3 个 deltat 文件被下载两次:
- 一次在指定文件夹中调用
load.timescale()
- 另一个时间在当前目录中调用
load.tle(stations_url)
这令人沮丧,因为此时它们已经存在并且它们污染了当前目录。请注意,stations.txt最终出现在正确的位置(~/data/skyfield)
如果容器以交互方式运行exec(open("script.py").read())
,则在 python shell 中调用会再次提供正常行为。谁能重现这个问题?很难说它是来自 python、docker 还是 skyfield。
dockerfile 就是这两行:
然后(假设构建的图像被标记为 astro)我运行它:
这是输出(前提是运行前文件夹为空):
编辑
将 -t 添加到 docker run 并不能解决问题,但有助于更好地说明问题。我认为它可能来自 Skyfield,因为 github 上的一些最近的问题看起来非常相似,但并不完全相同。
python - Skyfield:在给定的时间间隔内以 1 秒的周期实现 sgp4 结果
我已经在 python 中使用 Skyfield 实现了 sgp4 算法。
我需要 1 天时间间隔的位置向量,周期为 1 秒。为此,我必须反复计算 sgp4,每次加 1 秒。
有没有办法返回一个包含所有位置的向量?
python - 随着时间的推移传播卫星目录的有效方法
问题陈述
我需要使用或类似方法从 space-track.org 传播最近 TLE 的整个目录(需要免费帐户才能查看) 。skyfield
列表中通常有 15k-16k TLE。我有它的工作,但它很慢。在服务器上使用 46 个内核大约需要几个小时。
没有结婚skyfield
。如果astropy
或pyephem
或其他东西更快,我会很乐意接受一个答案,表明我正在尝试使用它来做什么。
最小的例子
对于我的应用程序,我将 TLE 加载到 Pandas 数据框中并在那里进行分析,因此我将把我的示例保留在 Pandas 世界中。最小的例子如下。
假设卫星目录保存为catalog.txt
,设置环境,然后读取 TLE,生成sf.sgp4lib.EarthSatellite
对象,并将所有内容加载到 Pandas 数据帧中。我们还向一些观察点偏移了位置。我将选择一个观察点留给读者(0、0、0 可以):
每个循环 2.1 秒 ± 20 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)
创建一个时区感知日期时间对象数组,在其上传播所有卫星。在这里,我选择了从写这篇文章当天午夜前 4 小时到之后 4 小时的每 10 分钟。
每个循环 189 毫秒 ± 36.9 毫秒(平均值 ± 标准偏差。7 次运行,每次 10 次循环)
最后,计算每个卫星的每个时间步长的天体测量位置。这需要永远。为了获得时间,我再次运行时间太长了,但在服务器上使用 46 个内核大约需要几个小时。
额外细节
我在文档中发现了关于日期数组的讨论,该讨论建议一次传递整个数组:x.at(ts.utc(times))
. 到目前为止,这需要更少的内核并且运行速度更快,但仍然需要非常长的时间。
通过为天体测量创建生成器,我暂时解决了这种减速问题(最初是为什么我不再一次性传递整个times
数组),但最终我实际上需要评估事情,所以我无法永远避免繁重的工作。
如果最终的用例适合某种特定的加速,我最终需要从这些对象中获取站点的观察角度,所以[x.altaz() for x in row.astrometrics]
类型的东西。
关于解决方案的想法
我现在的想法是,我正在为目录中的每颗卫星计算整个夜间每个时间步长的观测点位置。我可能是错的,但如果我是对的,那么我想通过计算一次然后为每颗新卫星查找它,我会看到一个相当不错的加速(可能还不够)。有人知道怎么做这个吗?
此外,如果那里有更快的轨道传播器实施,或者有一种加快天空场实施的方法,我会很乐意接受一个答案,说明如何使用它来做我正在尝试做的事情(因此包括astropy
和pyephem
标签)。
谢谢你。
python - 计算从地球上某个位置看到的拉格朗日点的 RA DEC/AZ EL
当提供 UTC 时间戳和地球上的 Lat/Lon/Alt 观察者位置时,我想将天空中的五个拉格朗日点 (L1 - L5) 的位置计算为 RA/DEC 或 AZ/EL。我正在查看 pyephem、pyorbital 和 skyfield,但据我所知,他们不支持这一点。如果有人能指出我在 python 中计算这个的参考/代码,那将不胜感激。
PS 如果还不是 pyephem/skyfield/pyorbital 的一部分,我认为这将是一个有趣的添加功能?
python - 使用天空场找到行星/卫星的平均节点
我希望能够找到行星/卫星的平均节点。
这与这个问题完全不同,因为我正在寻找日期的平均黄道和月亮(或任何其他天体,但让我们保持简单)之间的节点
“日期平均值(或有时 MOD) ”如http://nsdb.imcce.fr/multisat/Descripe.html描述的:
日期平均值(IAU76):ICRF 中给出的卫星天体测量坐标使用 IAU 1976 年采用的岁差模型转换为日期的赤道和分点。
我知道skyfield使用ICRF位置。我怀疑必须使用date.P
skyefield 的内部值(compute_precession(jd_tdb)
?或任何其他?)来获得date 平均纬度的预期值。
但是如何?
最终获得日期平均纬度的其余部分获得节点时间的过程已经被Brandon Rhodes很好地描述了 ,所以我想这部分不需要讨论。
如果可能的话,我想使用 skyfield 或至少使用 python。
因为我还没有接受过那些“转换,参考框架..”业务的培训;任何帮助都将被使用并非常感谢。
transformation - Skyfield 以 ICRS 变换为中心。有没有类似 SOFA / ERFA atic13 的东西?
我目前正在研究天文安装支持工具。这需要在 JNow 和 J2000 之间转换坐标。我已经使用 SOFA 库中的 ERFA 实现来完成此操作,该库也存在于 astropy 中。当我开始关注 Skyfield 进行卫星跟踪时,我想减少使用的库的数量。实际上,从 J2000(或 ICRS)到 JNow(Topocentric)的转换可以在 ERFA 上使用“atic13”例程完成:
在 Skyfield 上执行此操作的相同方法是
我可以从结果中访问坐标。现在让我伤心的是,因为我可能走错了路,我会反其道而行之。所以在 ERFA 中很简单:
但我没有找到 Skyfield 的正确方法。如果有人能以正确的方式指导我,这将非常有帮助。我实际上正在使用最新的(1.6)
米歇尔
pyephem - 计算(日期)和计算(观察者)的日地距离差异
在下面的代码中,使用 pyephem 计算地球-太阳距离与使用 sun.compute(date) 时从 skyfield 计算的结果非常一致,但在同一日期与地球上的观察者 obs 一起执行 sun.compute(obs) 时则不然.
这是因为在“ephem2”的情况下,sun.earth_distance 是从太阳到观察者的距离,而不是到地球中心的距离?
输出:
编辑:
正如 Brandon 所建议的,添加一个带有天空场的 topos 对象会得到与 sun.compute(obsever) 相同的结果。
输出:
约 12 公里的剩余差异随时间/位置而变化
python - 将时间增量添加到天空时间
Skyfield Almanach 文档
使用此代码定义计算日出和日落的时间点:
如果我只想使用一个(开始)日期并将下一个日期设置为正好一天之后呢?我不能只在day
论点中添加一个,因为这在月底是不正确的。
使用 Pythondatetime
我可以使用
timedelta
但我在 skyfield API 文档中找不到类似的东西。