Как рассчитать расстояние до комет с помощью Skyfields?

Я использую skyfield для вычисления относительного расстояния планет от Земли как функции времени (как описано на домашнюю страницу Skyfield). Это прекрасно работает, и теперь я пытаюсь реализовать расстояние от Земли до кометы (например, 67P/Чури).

Я нашел в NASA JPL способ создания файлов Spice SPK для комет (здесь), но он создает файлы xsp, которые я не могу прочитать с помощью команды load из skyfield.

Другая возможность, которую я рассматривал, — использовать информацию об орбите, как это предлагается для pyephem (см. здесь), но я не не знаю, как читать их в Skyfield.

Я также видел, что кометы были в дорожной карте для skyfield спринта по кодированию, так что, возможно, это мой ответ, но если вы знаете, как заставить его работать с текущей версией, это было бы очень полезно.


person Fabio    schedule 04.11.2016    source источник
comment
Я получаю ошибку 404 Not Found, когда пытаюсь перейти по URL-адресу ssd.jpl.nasa.gov. /x/spk.html, которым вы поделились. Не могли бы вы перепроверить и убедиться, что вы вставили его правильно?   -  person Brandon Rhodes    schedule 09.11.2016
comment
Веб-сайт временно не работает, но URL-адрес правильный. Я загрузил файл, который я получил с этого сайта, здесь: github.com/facero/skyfield-comets   -  person Fabio    schedule 09.11.2016
comment
Я понял, что файл, который я получил из веб-интерфейса системы Horizons Ephemeris, был в текстовом формате. Теперь я загрузил двоичный файл из интерфейса telnet (веб-страница кажется все еще недоступной). Кажется, что команда load в скайфилде не может загрузить любой файл .bsp. Я прав ? Загрузка моего файла bsp с помощью команды load возвращает объект типа _io.BufferedReader вместо skyfield.jpllib.SpiceKernel при загрузке файла de422.bsp.   -  person Fabio    schedule 14.11.2016


Ответы (1)


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
person Brandon Rhodes    schedule 17.10.2020