如何使用 Skyfields 计算到彗星的距离?
How to calculate distance to comets using Skyfields?
我正在使用 skyfield
计算行星与地球的相对距离随时间的变化(如 skyfield 主页所述)。它工作得很好,现在我正在尝试实现地球=>彗星距离(例如 67P/Tchouri)。
我在 NASA JPL 找到了一种为彗星创建 Spice SPK 文件的方法 (here),但它生成的 xsp
文件我似乎无法用 load
命令来自 skyfield
.
我考虑的另一种可能性是使用 pyephem
中建议的轨道信息(参见 here),但我不知道如何在 Skyfield
.[=20 中阅读它们=]
我还看到 comets 在 skyfield
编码冲刺的路线图上,所以这可能是我的答案,但如果你知道如何让它与当前版本一起工作,那将非常有帮助。
Skyfield 确实获得了对彗星的支持!您可以在这里找到详细信息:
https://rhodesmill.org/skyfield/kepler-orbits.html#comets
调整文档中的代码,这是来自小行星中心数据库的彗星距离:
from skyfield.api import load
from skyfield.constants import GM_SUN_Pitjeva_2005_km3_s2 as GM_SUN
from skyfield.data import mpc
ts = load.timescale()
eph = load('de421.bsp')
sun, earth = eph['sun'], eph['earth']
with load.open(mpc.COMET_URL) as f:
comets = mpc.load_comets_dataframe(f)
comets = comets.set_index('designation', drop=False)
row = comets.loc['1P/Halley']
comet = sun + mpc.comet_orbit(row, ts, GM_SUN)
t = ts.utc(2020, 10, 17)
ra, dec, distance = earth.at(t).observe(comet).radec()
print('Distance in AU:', distance.au)
我看到了结果:
Distance in AU: 35.22790002485247
我正在使用 skyfield
计算行星与地球的相对距离随时间的变化(如 skyfield 主页所述)。它工作得很好,现在我正在尝试实现地球=>彗星距离(例如 67P/Tchouri)。
我在 NASA JPL 找到了一种为彗星创建 Spice SPK 文件的方法 (here),但它生成的 xsp
文件我似乎无法用 load
命令来自 skyfield
.
我考虑的另一种可能性是使用 pyephem
中建议的轨道信息(参见 here),但我不知道如何在 Skyfield
.[=20 中阅读它们=]
我还看到 comets 在 skyfield
编码冲刺的路线图上,所以这可能是我的答案,但如果你知道如何让它与当前版本一起工作,那将非常有帮助。
Skyfield 确实获得了对彗星的支持!您可以在这里找到详细信息:
https://rhodesmill.org/skyfield/kepler-orbits.html#comets
调整文档中的代码,这是来自小行星中心数据库的彗星距离:
from skyfield.api import load
from skyfield.constants import GM_SUN_Pitjeva_2005_km3_s2 as GM_SUN
from skyfield.data import mpc
ts = load.timescale()
eph = load('de421.bsp')
sun, earth = eph['sun'], eph['earth']
with load.open(mpc.COMET_URL) as f:
comets = mpc.load_comets_dataframe(f)
comets = comets.set_index('designation', drop=False)
row = comets.loc['1P/Halley']
comet = sun + mpc.comet_orbit(row, ts, GM_SUN)
t = ts.utc(2020, 10, 17)
ra, dec, distance = earth.at(t).observe(comet).radec()
print('Distance in AU:', distance.au)
我看到了结果:
Distance in AU: 35.22790002485247