ОБНОВЛЕНИЕ: Skyfield только что претерпел значительные изменения, включая расширенную документацию и метод углового разделения — см. принятый ответ.
Я вычисляю видимое угловое расстояние между двумя объектами, используя Skyfield. Я не нашел метода в пакете, поэтому я «изобрел» способ, вычислив скалярное произведение между двумя видимыми векторами положения.
Это лучший способ сделать это в настоящее время? Правильно ли это в рамках Skyfield?
def separation(seconds, lat, lon):
lat, lon, seconds = float(lat), float(lon), float(seconds) # necessary it seems
place = earth.topos(lat, lon)
jd = JulianDate(utc=(2016, 3, 9, 0, 0, seconds))
mpos = place.at(jd).observe(moon).apparent().position.km
spos = place.at(jd).observe(sun).apparent().position.km
mlen = np.sqrt((mpos**2).sum())
slen = np.sqrt((spos**2).sum())
sepa = ((3600.*180./np.pi) *
np.arccos(np.dot(mpos, spos)/(mlen*slen)))
return sepa
from skyfield.api import load, now, JulianDate
import numpy as np
from scipy.optimize import minimize
data = load('de421.bsp')
sun = data['sun']
earth = data['earth']
moon = data['moon']
sep = separation(12000, 32.5, 215.1)
print "sun-moon aparent separation: ", sep, " arcsec"