我正在尝试使用 Skyfield 来绘制从地球到太阳系行星的 au 距离作为时间的函数。这超级简单,甚至在包主页的首页中都有。然而,虽然这对水星、金星和火星非常有效,但它不适用于其他行星。我不熟悉 JPL 星历文件,但似乎 Jupiter 在 de421.bsp 文件中没有可以解释该问题的密钥条目。
这是一个最小的示例(来自主页的示例):
from skyfield.api import load, now
planets = load('de421.bsp')
earth, planet = planets['earth'], planets['jupiter']
jd = now()
position = earth.at(jd).observe(planet)
ra, dec, distance = position.radec()
print(distance)
错误如下。请注意,如果在上面的代码中将 'jupiter' 替换为 'mars',它不会崩溃。
----> earth, planet = planets['earth'], planets['jupiter']
KeyError: "kernel 'de421.bsp' is missing 'JUPITER' - the targets it supports are:
SOLAR SYSTEM BARYCENTER, MERCURY BARYCENTER, VENUS BARYCENTER, EARTH BARYCENTER,
MARS BARYCENTER, JUPITER BARYCENTER, SATURN BARYCENTER, URANUS BARYCENTER,
NEPTUNE BARYCENTER, PLUTO BARYCENTER, SUN, MERCURY, VENUS, MOON, EARTH, MARS"
我是否以错误的方式使用星历文件(重心错误?)或者这只是 de421.bsp 文件的限制?我在 Skyfield 网站(此处)上阅读了星历文件的描述,但不确定我是否完全理解它。
有关如何使用 Skyfield 执行地球-木星距离的简单计算的任何建议?
谢谢 !