8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者向け】KyoshinMonitorLibチュートリアル

Posted at

この記事は 地震界隈 Advent Calendar 2020 9日目のやつです。

僕の作成したライブラリである、KyoshinMonitorLibを使って各観測点の震度を取得してみましょう。
初心者の方でもなんとなく動かせるようになるように画像マシマシ、言語機能は控えめにやります。

プロジェクトの作成

VisualStudioを起動したらまずは 新しいプロジェクトを作成 しましょう。
(もしかしたらウィンドウの色が違うかもしれませんが、あまり気にしないでください)
image.png

みなさん豪華な画面のアプリを作ってみたいと思うかもしれませんが、まずは基本のロジック部分を触ってみるということでコンソールアプリを作成します。
image.png

プロジェクトの場所は好きな場所で大丈夫ですが、プロジェクトフォルダをまとめるフォルダを作っておくのがおすすめです。
image.png

これでプロジェクトの作成は完了です。

ライブラリのインストール

プロジェクトの作成が完了したら ソリューションエクスプローラー の今回作成したプロジェクトを右クリックして NuGet パッケージの管理 を選んでください。
(殆どの方はソリューションエクスプローラーが左側にあるかもしれません。僕が右側が好きなだけなのであまり気にしないでください)
image.png

画面が表示されたら、

  1. 上部の 参照 をクリックし、 検索ボックスに KyoshinMonitorLib と入力します。
  2. 今回は画像から取得するのが目的なので、 KyoshinMonitorLib.Images を選択してください。
  3. 右側に表示される インストール ボタンをクリックします。
    image.png

変更のプレビュー が表示されたらそのままOKしてください。
image.png

事前準備

ここから強震モニタの情報を取得する処理を書いていくわけですが、強震モニタからは観測点情報を取得することができません。
そのため、別途観測点情報が必要になりますが今回は僕が作成した観測点リストをダウンロードしてください。
https://github.com/ingen084/KyoshinEewViewerIngen/raw/936634ae230942126790de1a3d1dc545a2f7de98/src/KyoshinEewViewer/Resources/ShindoObsPoints.mpk.lz4

(自作ソフトに同梱も可能です。その際はクレジットの記載をしていただけると非常に喜びます。またこのデータは時期によっては古くなっている可能性があるため定期的に確認してください。)

ダウンロードが完了したらそのファイルをソリューションエクスプローラーにドラッグドロップします。
image.png

ドラッグドロップが完了したらそのファイルを右クリックし、プロパティを開きます。
image.png

出力ディレクトリにコピー新しい場合はコピーする に選択してください。
image.png

これで観測点データの準備はバッチリです。

とりあえず取得してみる

Program.cs を以下のように書き換えてみてください。

using KyoshinMonitorLib;
using KyoshinMonitorLib.Images;
using System;
using System.Threading.Tasks;

namespace KyoshinMonitorLibTutorial
{
	internal class Program
	{
		// awaitが使えるようにasync Taskに
		static async Task Main()
		{
			// 出力ディレクトリにコピーした観測点情報を読み込む
			var points = ObservationPoint.LoadFromMpk("ShindoObsPoints.mpk.lz4", true);
			// しっかりメモリを開放するためにusingをつけてAPIのクライアントを作成する
			using var webApi = new WebApi();

			// 現時刻から1分前の時刻を取得する
			var targetTime = DateTime.Now.AddMinutes(-1);

			// もとにする観測点情報と取得したい時間を添えて震度を取得する
			var result = await webApi.ParseIntensityFromParameterAsync(points, targetTime);

			// Dataがnullの場合は取得に失敗している
			if (result.Data == null)
			{
				Console.WriteLine("取得に失敗しました");
				return;
			}

			// とりあえず観測点情報を出力してみる
			foreach (var point in result.Data)
			{
				// AnalysisResultがnullの場合は取得できていない観測点のため表示しない
				if (point.AnalysisResult == null)
					continue;

				// 地域名 観測点名 震度 の形で出力してみる
				Console.WriteLine(point.ObservationPoint.Region + " " + point.ObservationPoint.Name + " " + point.AnalysisResult);

				// point.Color で解析に使用された色
				// point.ObservationPoint.Location で地理座標
				// とかいろいろできるので活用しよう!
			}
		}
	}
}

ちなみに しっかりメモリを~ と書いている部分は半分ウソなので初心者の方は鵜呑みにしないでください。分かる人はわかると思います。
このまま実行するとずらーっと次のように出力されると思います。

image.png

バッチリ取得できましたね!
毎秒正確な時間にリクエストするためのタイマーやインターネット時刻の活用などを行う機能もあるので主な使用例はこちらのコードも参考にしてみてください。(丸投げ)
https://github.com/ingen084/KyoshinMonitorLib/blob/master/src/Tests/Program.cs

タイマー周りは多分Kiwi Monitorでも使われてると思います。

URL生成機能

そんな解析機能いらねえよ!という方向けにURL生成クラスも用意しています。

// using KyoshinMonitorLib.UrlGenerator;

// 地中PGA画像データへのURLを作成
WebApiUrlGenerator.Generate(WebApiUrlType.RealtimeImg, targetTime, RealtimeDataType.Pga, true);
// 地上1.0Hz応答速度画像データへのURLを作成
WebApiUrlGenerator.Generate(WebApiUrlType.RealtimeImg, targetTime, RealtimeDataType.Response_1Hz);
// P/S波画像データへのURLを作成
WebApiUrlGenerator.Generate(WebApiUrlType.PSWave, targetTime);
// 緊急地震速報情報のURLを作成
WebApiUrlGenerator.Generate(WebApiUrlType.EewJson, targetTime);

すでにソフトを作成されている方も是非活用してみてください。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?