地球到木星与Skyfield的距离

Fab*_*bio 3 python astronomy skyfield

我正在尝试使用Skyfield绘制从地球到太阳系行星的距离作为时间的函数.这非常简单,甚至在包主页的首页中给出.然而,虽然这对汞,金星和火星非常有效,但它对其他行星不起作用.我不熟悉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)
Run Code Online (Sandbox Code Playgroud)

错误如下.请注意,如果您在上面的代码中将'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"
Run Code Online (Sandbox Code Playgroud)

我是以错误的方式使用星历文件(错误的重心?)还是这只是de421.bsp文件的限制?我在Skyfield网站(这里)上阅读了星历文件的描述,但不确定我是否完全理解它.

有关如何使用Skyfield进行地球 - 木星距离简单计算的任何建议吗?

谢谢 !

Blu*_*n93 6

就像错误说的那样,你需要使用JUPITER BARYCENTER而不是jupiter.

  • @Fabio JPL 星历表的实际计算、制表和插值有点复杂,但在阅读了一些链接(下一条评论)后,我认为地月重心(质心)在太阳系计算,然后地球和月球之间的相对运动被视为有点独立的计算。对于地月,它们也为我们单独分解,但对于木星重心(行星加上它的所有卫星),它并没有在 Skyfield 中单独分解。木星是如此之大,以至于差异非常小。 (2认同)