はじめに
この記事は防災アプリ Advent Calendar 2022の10日目です。
自己紹介
まずお前誰だよ。ってなる人もいると思うので自己紹介...
主にYoutubeで24H地震観測を行っているFukuokaMGNTCamです。
(是非見ていってください。)
簡単なプログラミングや地震について興味があり、日々プログラミングや地震観測に務めています。
地震情報とは何ぞや?
速報値or暫定値が出された情報をまとめたものですねハイ。
今回C#と書いたのですがC#じゃなくてもJQuakeで使われているJavaScript(?)
でも情報は書けます。ただ自分がC#専なのでC#指定しただけです。
情報源を取得する
自分が作っているソフト「QuakeInfoText(名前は適当)」では
このようなデザインになっています。(2022/12/04のインドネシアでの大噴火)
こういう情報を表示させるためにはAPIというものが必要です。
APIはggってもなかなか出てこないこともあります。
私が知っている限りのAPIの例として
・P2P API v2
・DM-D.S.S.
などがあります。(自分の知っている限り)
ただAPI見つけたとなっても初見では解読するのは難しい上、文字だらけです。
分からないという場合はGitHubで探してみましょう。
サンプルとして公開してくれている人もいるので見てみた方が早いです(投げやり)
APIを読んで地震情報を表示させる
Visual Studioで作る方が大半だとは思いますが、「ライブラリ」というもので
解析すると簡単になります。
こういったAPIは「NewtonJson」というライブラリを使って解析しましょう。
インストールしただけでは何の意味もないので、使うクラスファイル(.cs)内の
上の方に
using NewtonJson;
using Newtonsoft.Json.Linq;
とusing...があるので追加しておきましょう。
情報を表示させる
そして大事なのは表示させること。結果的に表示できなかったら何なんだと。
文字を表示させる方法として
・Label表示
・pictureBox内に書く
という方法があります。後者の方は文字だけでも難しい上、APIを扱うとなると
初心者視点で、難易度鬼になるので今回はラベル表示。
ラベル表示では
label1.Text = (API);
という感じになります。(API)の部分は書き方がいろいろあるのでこんな感じに。
これをマグニチュードとか深さや時間、津波情報などで分けます。
Epicenter.Text = (Epicenter); //震源名
magnitude.Text = (Magnitude); //マグニチュード
depth.Text = (depth); //深さ
time.Text = (time); //時刻
Thunami.Text = (Thunami); //津波情報
という感じに...
震度ごとに色を付ける
最後に震度ごとに色を付けないとだいぶわかりにくくなりますね。
色を付けるには主に2パターンあります。
・ラベルでする
・画像を使う
(ほかの方は別のやり方かも...)
この中で言えば画像を使った方が比較的楽です。震度ごとの画像+遠地時の画像を
リソース内にインプットして使うだけ。
swich(最大震度のAPI)
{
case "1" //P2PのAPIであれば10
pictureBox.Image = Properties.Resources.(震度1の画像をリソースでの名前から使う);
case "2" //P2PのAPIであれば20
pictureBox.Image = Properties.Resources.2;
case "3" //P2PのAPIであれば30
pictureBox.Image = Properties.Resources.3;
case "4" //P2PのAPIであれば40
pictureBox.Image = Properties.Resources.4;
case "5-" //P2PのAPIであれば45
pictureBox.Image = Properties.Resources.5jaku;
case "5+" //P2PのAPIであれば50
pictureBox.Image = Properties.Resources.5kyou;
case "6-" //P2PのAPIであれば55
pictureBox.Image = Properties.Resources.6jaku;
case "6+" //P2PのAPIであれば60
pictureBox.Image = Properties.Resources.6kyou;
case "7" //P2PのAPIであれば70
pictureBox.Image = Properties.Resources.7;
}
という感じで自分は表記。(ほかの方は別のやり方かな...?)
別に色なしでもいいわ苦労したくないしという方であれば
Shindo.Text = (Maxint); //最大震度
でもいいですし。
おわりに
以上、MGNTによるわかりにくい地震情報の書き方でした。
サンプル見てわかる人もいればわからないであろう人もいると思って、
今回この記事を書かせてもらいました。
参考になれば幸いです。
余談
最終的に地図描画して強震モニタか地震情報を描画するのが目標です。
日々ggりながらプログラミングしているところですが地図描画の仕方すらわからない自分に誰か助けてください。(懇願)
というか描画に履歴まで付けたい発想力豊かなアホ(←自分)。
...余談スペース使って何を書いてるんだろ...