2

我试图循环天空场数据以获取给定日期#range 的远地点和近地点,但未能成功。感谢任何帮助。提前致谢

import numpy as np
import matplotlib.pyplot as plt

from skyfield.api import Loader, Topos 

load = Loader('~/Documents/fishing/SkyData')
data = load('de421.bsp')
ts   = load.timescale()

planets = load('de421.bsp')
earth   = planets['earth']
moon    = planets['moon']
Chennai  = earth + Topos('13.0827 N', '80.2707 E', elevation_m = 6.7)


alt, az, dist  = Chennai.at(dt).observe(moon).apparent().altaz()

from datetime import timedelta, date

def daterange(date1, date2):
    for n in range(int ((date2 - date1).days)+1):
    yield date1 + timedelta(n)


start_dt = date(2018, 12, 20)
end_dt = date(2019, 1, 13)


for dt in daterange(start_dt, end_dt):
    print(dt.strftime("%Y-%m-%d"))
    print ("altitude: ", alt.degrees)
    print ("azimuth:  ", az.degrees)
    print ("distance (to center of Moon): ", dist.km)
    print ("distance to closest point on moon: ", round(dist.km, 0) - 1767.)
    print ("compare to: ", 364857)
4

1 回答 1

1

看起来您的代码会一遍又一遍地打印出相同的值,因为您只.at().observe()在程序顶部调用一次。相反,尝试在每次通过循环时调用它,方法是让它成为循环代码块for内的第一条语句。for

于 2019-01-19T20:16:43.080 回答