16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PyEphemで宇宙がヤバい

Last updated at Posted at 2020-02-18

はじめに

月の位置や月齢を取得したいなーと思って最初は安直にスクレイピングを考えていたんだけど、PyEphemというとっても便利なライブラリがあることを知った。
qiitaには1個もPyEphemのタグがついた記事がないので書いときます。

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万メートルにいて、食のようですね。

iss.png ↑ここら辺

おわりに

うちではラズパイで動かしているtwitterやLINEのbotで月の情報を表示するのに利用しています。

pt2.png 毎時、自宅周辺の天気、ラズパイのCPU温度、月齢を投稿するTwitterボット。 pl2.png 月って聞くと月齢と位置を教えてくれるLINEボット。

追記

にも書いたように、上で紹介している軌道情報提供サービスは2021年2月にサイトごと終了してました。

他の同様なサービスとしては

などが使えました。(実際のISSの軌道で確認済み)

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?