Impor semua paket yang dibutuhkan

from skyfield import api
from skyfield import almanac
from skyfield.nutationlib import iau2000b

Buat timescale dan unduh ephemeris. Kita akan menggunakan ephemeris dari JPL NASA versi de421.bsp.

timescale = api.load.timescale()
ephemeris = api.load('de421.bsp')

Tentukan koodinat di permukaan Bumi di mana prediksi akan dilakukan, sebagai contoh kita gunakan Observatorium Bosscha. Koodinat yang digunakan dalam derajat.

# Observatorium Bosscha 107:37:00 BT; -6:49:50 LS
longitude = 107 + 37/60
latitude = -(6 + 49/60 + 50/3600)

Perhitungan posisi Bulan dan Matahari bergantung pada posisi pengamat di Bumi. Oleh karena itu kita perlu menentukan lokasi topografi Skyfield untuk koordinat di atas.

bosschaTopo = api.Topos(longitude=longitude, latitude=latitude)

Waktu Terbenam Matahari dan Bulan

Misalkan ingin menghitung waktu terbenam antara tanggal 5 April dan 6 April 2019.

t1 = timescale.utc(2019, 4, 5, 0)
t2 = timescale.utc(2019, 4, 6, 0)

Paket Skyfield telah menyediakan fungsi untuk menghitung waktu terbenam Matahari. Definisi matahari terbenam yang digunakan paket Skyfield sesuai dengan definisi Matahari terbenam dari USNO, yaitu ketika pusat piringan Matahari berada pada jarak zenit $90^o 50’$.

sunriset, sunBol = almanac.find_discrete(t1, t2, almanac.sunrise_sunset(ephemeris, bosschaTopo))

Hasilnya adalah sebuah array waktu, dan array boolean yang akan bernilai True jika matahari terbit dan bernilai False jika matahari terbenam.

Untuk menghitung waktu terbenam Bulan dengan definisi di atas kita dapat membuat fungsi sebagai berikut.

def moonrise_moonset(ephemeris, topos):
    moon = ephemeris['moon']
    topos_at = (ephemeris['earth'] + topos).at

    def is_moon_up_at(t):
        t._nutation_angles = iau2000b(t.tt)
        return topos_at(t).observe(moon).apparent().altaz()[0].degrees > -50/60

    is_moon_up_at.rough_period = 0.5 
    return is_moon_up_at
moonriset, moonBol = almanac.find_discrete(t1, t2, moonrise_moonset(ephemeris, bosschaTopo))

Keluarannya akan mirip dengan format waktu terbenam Matahari.

Waktu terbenam dalam Julian Date

Waktu terbenam Matahari:

sunriset[~sunBol]

waktu terbenam Bulan

moonriset[~moonBol]

Waktu terbenam dalam standar UTC

print(sunriset[~sunBol].utc_iso())
print(moonriset[~moonBol].utc_iso())
['2019-04-05T10:52:48Z']
['2019-04-05T11:02:37Z']

Jupyter Notebook