はじめに
前回、PyEphemの機能を見てて、ISSを目視できる日時を予測できるんじゃないかなぁとなんとなく思ったんだけど、でもISSが見える条件ってなんだろう。
物理的な位置関係とかでごちゃごちゃ悩んで、こりゃ思ったより難しいな。っていうか無理!!
って一瞬なったけど、いや、よく考えると、うーんもしかして・・・
次の3つの条件を満たせばいいんじゃなかろうか。
- 観測者から見たISSの仰角が正
- 観測者から見た太陽の仰角が負
- ISSが食じゃない
試してみる
import ephem
import requests
import datetime
from math import degrees as deg
tle_url = 'https://spaceflight.nasa.gov/realdata/sightings/SSapplications/Post/JavaSSOP/orbit/ISS/SVPOST.html'
loc = ('35.689922','139.692122',41) # 都庁
home = ephem.Observer()
home.lat = loc[0]
home.lon = loc[1]
home.elevation = loc[2]
sun = ephem.Sun()
doc = requests.get(tle_url).text
lines = doc.split('\n')
for idx in range(len(lines)):
if lines[idx].strip() == 'TWO LINE MEAN ELEMENT SET':
iss = ephem.readtle(lines[idx+2], lines[idx+3], lines[idx+4])
break
utcnow = datetime.datetime.utcnow().replace(second=0,microsecond=0)
utcnow += datetime.timedelta(days=0) # 確認用
for after in range(0, 60*24*10, 1): # 予測期間(m),予測間隔(m)
when = utcnow + datetime.timedelta(minutes=after)
home.date = when
sun.compute(home)
alt_sun = deg(sun.alt)
iss.compute(home)
alt_iss = deg(iss.alt)
az_iss = deg(iss.az)
iss.compute(when)
ecl = iss.eclipsed
if alt_sun <= -4 and alt_iss >= 10 and not(ecl):
jst = when+datetime.timedelta(hours=9)
print('%s - %.2f %.2f' % (jst, alt_iss, az_iss))
直近10日間を予測してみると、
2020-03-07 05:38:00 - 11.98 9.07
2020-03-07 05:39:00 - 12.73 27.92
2020-03-07 05:40:00 - 11.22 46.14
2020-03-09 05:38:00 - 12.83 338.71
2020-03-09 05:39:00 - 19.49 353.95
2020-03-09 05:40:00 - 25.41 19.47
2020-03-09 05:41:00 - 24.90 51.33
- 3月7日5時38分から3分間程度 (北から北東へ最大12.73度)
- 3月9日5時38分から4分程度 (北北西から北東へ最大25.41度)
と予測した。
答え合わせ(ズル)
以下の予報サイトで確認してみる。
位置やTLE最新化サボりの誤差を考慮すると、ほぼほぼ正解と言って良さそう。(ISSの仰角を10、太陽の仰角を-4としたのはNASAの予測に合わせてチューニングした。たぶんそんくらいじゃないと低いか明るいかで見えないんだろう。)
答え合わせ(真)
基本的にISSが見える時刻ってのは夜明け前か日没後の30分~1時間前後くらいが多い。
ここはせっかくなので朝5時くらいの予測のときに、めっちゃ早起きするのがおすすめ。
暗い中一人でこっそり起きて、寝ぼけまなこをこすりながら(ほんとに見えるのかなぁ)と思いながら空を眺めてると、予測通りの方角、高さで光点が見えたときの感動は久しく忘れていたレベルのもの。
これ、対象が具体的だし、ちょっと論理的な考察が求められるし、ソースコード量的に簡単だし、感動できるしで、子どものプログラミングの教材に最適なんじゃないかなぁ。
追記
ISSのTLEを提供してくれていた spaceflight.nasa.gov が2021年2月に廃止されてしまった。ので、 https://celestrak.com/NORAD/elements/stations.txt から取得&フォーマットも若干違うので修正が必要。