特定の場所の日の出、日の入り、太陽正午、夕暮れの時間を返す関数があります。この関数はpyephemを使用しており、非推奨になっているため、skyfield を使用するように関数を書き直す必要があると思います。ただし、skyfield には関数.previous_rising
、.next_setting
または.next_transit
(少なくとも、私はそれらを見つけることができません) がありません。これは、私が pyephem で使用したものです。
skyfield には function があり、find_discrete
指定された時間の間を検索して、関数がいつ変更されるかを見つけるため、テストするために次のように記述しました。
from datetime import datetime, timedelta
from skyfield import api, almanac
import pytz
ts = api.load.timescale()
planets = api.load('de421.bsp')
sun, earth = planets['sun'], planets['earth']
lat, lon = '44.59028 N', '104.71528 W' # UFO Mooring Site
tzn, elv = 'US/Mountain', 1559
tz = pytz.timezone(tzn)
loc = api.Topos(lat, lon, elevation_m=elv)
earth_loc = earth + loc
def civil_twil(time):
"returns true/false if sun is above -6 degrees"
alt, az, dis = earth_loc.at(time).observe(sun).apparent().altaz()
return alt > -6
t0 = ts.utc(datetime.now(tz))
t1 = ts.utc(tz.normalize(datetime.now(tz) + timedelta(1)))
civil_dawn = almanac.find_discrete(t0, t1, civil_twil)
しかし、これは関数に 'rough_period' 属性がなく、ドキュメントにはそれが何であるかについて言及されていないというエラーが表示されるだけです。おそらく、almanac クラスで定義された関数に対してのみ有効であると推測します。しかし、繰り返しますが、それは言及されていません。
では、スカイフィールドを介して薄明時間をどのように見つけたり決定したりできますか?