天体撮影用の天気スコア算出アプリの作成
普通の天気予報の「晴れ」は全く当てにならなくて、いつもwindyと睨めっこしています。
windy は API を提供しているので、ひとまずアカウント登録します。
取得できるデータを確認し、計算式を考えて、計算アプリを作ってみます(もちろんコーディングは全部Gemini任せ)。
言語はpythonです。
早速、現段階の状況です。
算出ロジックは下の通り。
総合スコア
総合スコア = (雲スコア * 0.75) + (シーイングスコア * 0.1) + (湿度スコア * 0.05) + (風スコア * 0.1)
雲スコア (配点75%)
下層雲・中層雲・上層雲の合計雲量から算出します。
合計雲量 = min(下層雲[%] + 中層雲[%] + 上層雲 [%], 100) ※足して100を超える場合、100を上限とする
雲スコア = 100 - 合計雲量
シーイングスコア (配点10%)
シーイングはwindy APIで取得できるデータから算出できそうだったので頑張ってみました。
ここでは、大気屈折率構造定数(Cn2)を、複数の大気層(850hPa〜200hPa)にわたって積分することでシーイングを推定します。
1. 各大気層でCn2を計算:
Cn2 ∝ L04/3 * (dT/dz + Γ)2
(L0: 乱流の外スケール, dT/dz: 気温減率, Γ: 断熱減率)
2. 全層でCn2を積分: Integral_Cn2 = ∫ Cn2(z) dz
3. フリードパラメータ(r0)を算出: r0 = (0.423 * k2 * Integral_Cn2)-3/5
(k: 光の波数)
4. シーイング値(arcsec)に変換: Seeing(") = 0.98 * λ / r0
(λ: 光の波長)
5. スコア化: 0.5秒で100点、4.0秒で0点となるように線形変換します。
湿度スコア (配点5%)
気温と露点温度の差から、夜露の発生しやすさなどを評価します。
温度差 = 気温[℃] - 露点温度[℃]
湿度スコア = min(100, max(0, (温度差 / 15) * 100))
風スコア (配点10%)
地上の風速を評価します。
風スコア = max(0, 100 * (1 - 地上風速[m/s] / 10))
しかも値がランダムに変わっている感じ。
調べてみるとwindyから取得するデータが、コール毎に全く違う数値になっている事が分かりました。
これは全く使い物にならない・・・
ここまで来るのにも結構苦労してまして、kivyで記述してBuildozerでビルドしようと思いましたが、Buildozerでのビルドがどうやってもうまくいかない。
config.pxi を手動作成したり、いろいろしてみましたが断念。
そこからbeewareで書き直してここまでたどり着いたのに・・・
(もちろん書いたのは全部geminiですが)
コメント
コメントを投稿