How to spend the terminal

技術ブログでさえない

全国で使える雨雲接近検知システム

通り雨という洗濯物の乾きを奪う恐ろしい存在があります。今まで何度も洗濯物をやられました。 そのような悲しみをこれ以上しないために雨雲が接近したら通知するシステムを作ろうと思いました。外出中だとあまり意味ないですけど

DIAS

DIAS(Data Integration and Analysis System)という主に東京大学が実施しているシステムがあります。DIASでは地球環境の観測を行なっており、観測データを提供しています。ここで雨雲データを入手すれば容易に作れそうですが、思わぬ問題がありました。

それはユーザ登録ページがHTTPだということです。

さすがにログインページはHTTPSですが、パスワードと名前と所属組織名と電話番号を平文で送信しないといけないのはまずいでしょう。パスワードはともかく、名前と所属組織名と電話番号は嘘をつくことができないので盗聴されていたら心配です。(やましい理由がなくても) そこでデータをどこかのサイトから入手する必要があります。

データを入手するサイト

東京は東京アメッシュ(http://tokyo-ame.jwa.or.jp/)を利用することができます。東京アメッシュで入手できる雨雲メッシュの画像は透過GIFなので加工が非常に楽です。しかし、東京アメッシュで入手できるデータは東京に限定されています。入手したいデータは香川県高松市なので他のサイトを利用する必要があります。そこでXRAIN(http://www.river.go.jp/x/xmn0107010.php)を利用します。

使用言語

使用した言語はGo言語です。やっていることは単純なので、無理にGo言語で書くよりはPythonなどで書いた方がいいと思います。というかPythonの方が楽でしょう。

プログラム

プログラムはGitHubに公開しています。

go get github.com/moxtsuan/murakumo

で入手することもできます。

github.com

ss.goはスクリーンショットの撮影、cutter.goは画像のトリミング、colorcount.goは雨雲メッシュを測定します。 var.goの値を測定したい地域になるよう変更してください。lonは経度、latは緯度、opaは透明度、zoomは縮尺です。

画像の入手

XRAINではcanvasJavaScriptで描画されています。そのため、普通のスクレイピングでは入手することができません。JavaScriptを実行させて描画させた上で入手する必要があります。 今回はcanvasをそのまま入手することができなかったので、スクリーンショットを撮影して画像を入手します。使用したブラウザはPhantomJSで、agouti(https://github.com/sclevine/agouti)を用いて操作を行います。入手した画像は次のようになります。

f:id:moxtsuan:20170914201458p:plain:w300

画像のトリミング

撮影した画像のトリミングを行います。トリミングにはcutter(https://github.com/oliamb/cutter)を使用しました。トリミングしたサイズは480x480で、zoom=12だと約15kmになるはずです。

f:id:moxtsuan:20170914201737p:plain:w300

雨雲メッシュの色を数える

雨雲メッシュの色を数えます。あらかじめ降水量ごとの色を設定しておき、それと一致すればカウントするようにしています。降水量が多いほど重要度が高いので降水量によってカウントする値を変えています。 降水量ごとの色は環境によって違うことがあるので適宜変更してください。一致なので色と色の間などが正しく測定できません。近似していればカウントする方が正しく測定することができると思います。

(2017/09/16 追記)

近似する色も測定できるようにしました。

検知

検知は測定値が閾値を超えたら行います。 終了ステータスをシェルスクリプトなどで拾って通知などを行います。

(2017/09/15 追記)

cronで自動実行する場合はPhantomJSのPATHをcronに記述してください。そうしないと動きません。 終了ステータスを1にしているとlog.Fatal()と被って誤動作を起こすので2にしました。

まとめ

全国で使える雨雲接近検知システムを作ることができました。 XRAINはこんな利用方法は想定されていませんので、入手しにくいデータであることはやむを得ないでしょう。 毎分取得は負荷がかかりそうなので負荷がかからない程度に運用しようと思っています。

東京大学などは早くDIASの登録ページをHTTPSにしてください。(重要)