はじめに
月の位置や月齢を取得したいなーと思って最初は安直にスクレイピングを考えていたんだけど、PyEphemというとっても便利なライブラリがあることを知った。
qiitaには1個もPyEphemのタグがついた記事がないので書いときます。
PyEphemについて
- https://pypi.org/project/ephem/ (ソース)
- https://rhodesmill.org/pyephem/ (リファレンス)
詳しくはリファレンスを読んでもらうこととして、ここでは簡単な使い方をどうぞ。
import ephem
import datetime
from math import degrees as deg
# Body(天体)クラスのインスタンスを作成。
moon = ephem.Moon()
# Observer(観測者)クラスのインスタンスを作成。
shinjuku = ephem.Observer()
shinjuku.lat = '35.6846'
shinjuku.lon = '139.7106'
shinjuku.elevation = 60
shinjuku.date = datetime.datetime.utcnow() # 任意の年月日の位置を求められる
# 観測者から見た天体を計算。
moon.compute(shinjuku)
print(deg(moon.alt)) # 20.88288333068003(地平線からの仰角(degで度に変換))
print(deg(moon.az)) # 218.0421642706897(北を0度とした方角)
print(moon.moon_phase) # 0.2820702016225599(月相)
print(shinjuku.date - ephem.previous_new_moon(shinjuku.date)) # 24.138740752328886(月齢)
上記を実行すると、新宿における現在の月の位置や満ち欠け(南南西に高さ20度の三日月)を教えてくれるわけです。
簡単で便利過ぎワロタ。
人工衛星の位置もわかる、、、だと!?
JAXAやNASAなどの軌道情報提供サービスが提供するTLE(Two Line Element)というデータを用いて人工衛星の位置なども計算できる。(pyorbitalでも可能)
国際宇宙ステーション(ISS)のTLEは、
https://spaceflight.nasa.gov/realdata/sightings/SSapplications/Post/JavaSSOP/orbit/ISS/SVPOST.html
の TWO LINE MEAN ELEMENT SET
というセクションに書かれている。(予測含めたくさんある)
値は軌道変更などにより変動するため、適宜取得する必要がある。
2020/048/17:15:00.000 (2月17日? 17時15分UTC?)時の値は、
ISS
1 25544U 98067A 20048.52024880 .00016717 00000-0 10270-3 0 9000
2 25544 51.6378 225.5202 0004926 282.0303 78.0295 15.49172297 13304
上記をもとに現在(shinjukuに設定した時刻)のshinjukuから見たISSの位置を計算してみる。
line1 = 'ISS'
line2 = '1 25544U 98067A 20048.52024880 .00016717 00000-0 10270-3 0 9000'
line3 = '2 25544 51.6378 225.5202 0004926 282.0303 78.0295 15.49172297 13304'
iss = ephem.readtle(line1, line2, line3)
# shinjukuから見た位置
iss.compute(shinjuku)
print(deg(iss.alt)) # -51.61249863302519
print(deg(iss.az)) # 142.92199525046195
# ISSがいる位置
iss.compute(datetime.datetime.utcnow())
print(deg(iss.sublat)) # -50.990213758123666
print(deg(iss.sublong)) # -139.8713732199458
print(iss.elevation) # 433325.5
print(iss.eclipsed) # True
shinjukuから見ると南東の地平線の下51度くらいの位置、ニュージーランドの東の上空43万メートルにいて、食のようですね。
↑ここら辺おわりに
うちではラズパイで動かしているtwitterやLINEのbotで月の情報を表示するのに利用しています。
毎時、自宅周辺の天気、ラズパイのCPU温度、月齢を投稿するTwitterボット。 月って聞くと月齢と位置を教えてくれるLINEボット。追記
にも書いたように、上で紹介している軌道情報提供サービスは2021年2月にサイトごと終了してました。
他の同様なサービスとしては
などが使えました。(実際のISSの軌道で確認済み)