NOAA Global Forecast Systemから天気予報データを抽出する
木更津高専専攻科 制御・情報システム工学専攻
2021年3月 ~ 株式会社Helpfeel
Uber配達始めました
共用部分だけ撮影してる
Rain Viewer
雨雲レーダーを無料で配信されていたサービス
2026年1月1日以降は、個人または教育目的でのみ利用可能になる
自前の雨雲レーダーのタイルサーバーに乗り換えた
© OpenStreetMap contributors https://www.openstreetmap.org/copyright
NOAA Global Forecast Systemの天気予報データ
米国政府による製作物のため、規約を守ればパブリックドメインとして自由に利用できる
ありがたい
GRIB2というファイルから天気予報データを取れる
GDALというコマンドラインツールを使うと中身を見れる
GeminiやChatGPTに頼りながらデータを抽出してみた
自分が知らない分野にはAIが頼もしい
gdalinfoでGRIB2ファイルの中身を見る
$ gdalinfo gfs.t00z.pgrb2.0p25.f000 > info.txt
ヘッダー
band 1から696までの一覧が並んでいる
band 1
1万行近くある
読み解くのが難しいので、Geminiに読んでもらう
たとえばband1には「海面更正気圧」データが入っているらしい
うーん説明を読んでも分からない
夕日がよく見える場所
いろいろ教えてくれたけど、情報の取捨選択が必要そう
たぶん大気の成分に関するデータを使えそう
Ozone Mixing Ratio(オゾン混合比, O₃MR)?
オゾンは紫外線を吸収し、短波長の光が減衰することで夕日の赤みが強調されるらしい
ここから先
は試行錯誤していないので、なんともわからない
雨雲を表示するデータとして、降水確率を使ってみた
※ 後から気づいたけど、レーダー反射強度を使うのが一般的らしい
Rain Viewerの雨雲レーダーは反射強度を使っていた
でも
の用途は正確な情報というより雰囲気の演出なので、気にしない
降水確率のband番号を取得する
$ gdalinfo -json gfs.t00z.pgrb2.0p25.f000 | jq '[.bands[] | select(.metadata"".GRIB_COMMENT | contains("Precipitation rate"))] | max_by(.metadata"".GRIB_FORECAST_SECONDS | tonumber) | .band'
gdalinfoの結果をjqに読み込ませる
今回使ってGRIB2ファイルでは、
589
番に降水確率データが入っているgeoTIFF化
$ gdal_translate -b 589 -ot Byte -scale -srcwin 1 1 1438 719 gfs.t00z.pgrb2.0p25.f000 precipitation.tif
降水確率を最小値0~最大値1に正規化
0~255のバイトデータに量子化
ラスタータイル化
$ gdal2tiles.py --s_srs EPSG:4326 --xyz --zoom=0-2 precipitation.tif tiles
open tiles/leaflet.html
でタイルを見れる3時間ごとにスクリプト実行してレーダーを更新する
Helpfeelという会社のインフラに個人開発を合わせると、仕事に知見を持ち込める
Google Cloud Run Jobs
Terraform
感想まとめ
米国政府の天気予報データがパブリックドメインなのありがたい
会社のインフラに個人開発を合わせると、仕事に知見を持ち込めて役立つ
自分が知らない分野にはAIが頼もしいなと思った
GFSとかGRIB2とかGDALとかgeoTIFFとか
情報が正しいか検証できないぶん、対策は必要
雰囲気を演出する目的程度の雨雲に留める