この記事は 地震界隈 Advent Calendar 2020 3日目の記事です。
自己紹介
ingen084です!
リアルでは5月頃から某サイトの主にプレミアム会員を扱うグループで働かせていただいています。1
(隠してたけど最近特に隠さなくてもいいかなというお気持ちになってきた、というかGitHub見たらバレる)
KyoshinEewViewer for ingen
というソフトを作っていますが、最近更新できていません…。使ってくださっている方ごめんなさい。
この記事について
僕の頭の中のノウハウ(というか考え方?)の共有ということで。
画像の取得はすっ飛ばしています。今回の記事はあの点が並んでいる画像から場所ととの震度を求めます。
強震モニタの情報を解析するアプリを作る前に考えてほしいこと
私達サードパーティソフトウェアの開発者は不正な方法で強震モニタを閲覧している、させている事を忘れないでください。
複数のアプリケーションを起動することや、複数の情報がほしいがために通常のWebページで閲覧している以上のHTTPリクエストを送信することは、意図的に負荷をかけていることに違いありません。
強震モニタはみなさんの税金で運用されています(はず)。アプリケーションを利用・開発した結果迷惑をかける可能性が高いことを念頭に置き、負荷や帯域の面から見ると常に他の利用者に迷惑をかけていることを考慮しましょう。2
画像から観測点を特定する
まずは観測点です。
結論としては現状強震モニタが使用している地図の図法がわからない(僕がにわかなだけかも)かつ、見やすいように観測点がずらされている可能性なども考慮しほぼ手動でマッチングを行うしかありません。
まあ大体の人はこの時点で察してしまうと思いますが、この投稿ではその観測点のデータを作成するにあたってのテクニックを紹介します。
観測点を絞り込む
観測点はNIEDで公開されていますが、無効のものも含め1700件ですが、実際の強震モニタの画像には1000件ちょっとしか表示されておらず、700件ほどが表示されていない観測点になります。
まずその不要な観測点を取り除く作業を行うのですが、それに使用するのがかつて試験公開されていたスマホアプリ版強震モニタのAPIです。
APIの詳細はこれもまた需要があれば書きますが(コメントください)、このAPIでは詳細な観測点はわかりませんが観測点の震度と座標がわかります。
同じ強震モニタですから、このAPIで使用されている座標は強震モニタの画像でも使用されているということです。
APIについての詳細を見てみたい方は僕のライブラリのコードも参考にしてみてください。
https://github.com/ingen084/KyoshinMonitorLib
それAPIにも欠点があり、
- 観測点が少ない
- 異常な震度の観測点が混ざることがある
- そもそも正規のページで使用されるAPIではない
といった問題があります。
それを無理やり使用しているのが僕のソフトですが、使用は推奨しません。
ですがこれを活用することで観測点を絞り込むことが可能になりました。
ただし多少の差異はあるので適時見極めていきましょう。
観測点を割り当てる
実際の地図も参考に割り当てていきましょう!
地獄のように感じますが、結構絞り込めているので数時間で終わらせることが可能です。
アドバイスと言うかヒントですが、観測点がかぶっていると思われる箇所はたいていKiK-netが優先されています。
地中震度とかあるので。いままで手動でやろうとしてた人はアハ体験できるかもしれません。
拙作のツールとデータでぱぱっとやる方法(宣伝)
ここまでめんどくさそうな解説をしてきましたが、これらはすべて僕が作業してきたものでありMITライセンスでツールと成果物を配布しています。
好き勝手使ってください。
https://github.com/ingen084/KyoshinEewViewerIngen
これをCloneして src\Tools\ObservationPointEditor
をビルドしてください。
ビルド先のディレクトリの ObservationPointEditor.exe
を起動して、左下の ファイル(F)
→ 読み込み(L)
でさっきcloneしてきたフォルダの
src/KyoshinEewViewer/Resources/ShindoObsPoints.mpk.lz4
を開いてください。僕が数時間かけて調整した観測点データがあります。3
主に左側のパネルで操作するのですが、細かい解説は需要があったらやります(コメントください)。
上記のソフトを介することでCSVやJsonで出力することも可能です。
C#での使用例: https://github.com/ingen084/KyoshinMonitorLib/blob/master/src/Tests/Program.cs
画像の色から震度を求める
観測点の座標がわかったらあとは色から震度を求めるだけですね。
震度の場合、-3.0~6.9の100段階?で色が変化します。
まだ不確定ですが震度7.0の色も含めた101色の割当表を公開しています。
https://github.com/ingen084/KyoshinShindoColorMap
活用してね!
加速度の場合はちょっと難しく、500段階ほどありそうでした。(未特定)
近似値になる計算式を求めてもいいんですがやはりテーブルを作ったほうが確実だと思うので、そのあたりは見極めていきたい。(やる気力はない)