Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用天空场计算到彗星的距离?_Python_Astronomy_Skyfield - Fatal编程技术网

Python 如何使用天空场计算到彗星的距离?

Python 如何使用天空场计算到彗星的距离?,python,astronomy,skyfield,Python,Astronomy,Skyfield,我用它来计算行星与地球的相对距离,作为时间的函数(如skyfield主页上所述)。它工作得很好,现在我正在尝试实现Earth=>comet distance(例如67P/Tchouri) 我在NASA JPL找到了一种为彗星创建Spice SPK文件的方法(),但它会生成xsp文件,我似乎无法从skyfield使用load命令读取这些文件 我考虑过的另一种可能性是使用建议用于pyephem(参见)的轨道信息,但我不知道如何在Skyfield中读取它们 我还看到comets出现在skyfield编

我用它来计算行星与地球的相对距离,作为时间的函数(如skyfield主页上所述)。它工作得很好,现在我正在尝试实现Earth=>comet distance(例如67P/Tchouri)

我在NASA JPL找到了一种为彗星创建Spice SPK文件的方法(),但它会生成
xsp
文件,我似乎无法从
skyfield
使用
load
命令读取这些文件

我考虑过的另一种可能性是使用建议用于
pyephem
(参见)的轨道信息,但我不知道如何在
Skyfield
中读取它们


我还看到comets出现在skyfield编码sprint的路线图上,所以这可能是我的答案,但如果你知道一种方法使它与当前版本一起工作,那将非常有用。

skyfield确实获得了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

当我试图跟踪你共享的URL时,我发现一个404没有找到-你能仔细检查一下,看看粘贴是否正确吗?网站似乎暂时关闭,但URL是正确的。我在这里上传了我从这个网站上得到的文件:我知道我从Horizons Ephemeris系统web界面获得的文件是文本格式的。我现在从telnet界面下载了一个二进制文件(网页似乎仍处于关闭状态)。skyfield中的
load
命令似乎无法加载任何.bsp文件。我说得对吗?加载de422.bsp文件时,使用
load
命令加载我的bsp文件将返回
\u io.BufferedReader
类型对象,而不是
skyfield.jpllib.SpiceKernel