地震の震度分布地図画像を自動的に生成するシステムを作ってみた

はじめに

ちょっとした要望から、地震の震度分布図を自動的に作れるようにしてみました。

地震情報からSVG画像を生成する部分は以下の記事にまとめてあります。

気象庁防災情報XMLとD3.jsを使って地震の震度分布図を作る - Qiita
# はじめに ちょっとした要望から地震の震度分布図を作ることになりました。 この記事では構成の解説や感想をまとめています。 震度分布図を作るといってもやり方はいろいろあります。例えばArcGISのようなGIS系ソフトを使えば、手軽に...

今回作ったシステムは上記の記事内容から、主に以下の要素が加わっています。

  • 新規の地震情報の検知
  • フロントページの作成

構成

キーワード

  • 気象庁防災情報XMLフォーマット形式電文
  • IFTTT
  • 震度観測地点位置JSON
  • GeoJson
  • D3.js
  • d3-geo
  • jsdom
  • convert-svg-to-png
  • express

解説

新規地震情報追加の検知

気象庁からは、新規の地震情報を検知するためにPubsubhubbubの仕組みが提供されています。配信受信用の環境を作れば、リアルタイムに更新を検知することができます。ただ、環境構築以外にも利用申請が必要だったりと、多少利用ハードルがあります。

WebSubの仕組みで気象庁防災情報をリアルタイムに受け取ろう - Qiita
# 🔷はじめに 地震や台風のような災害情報をリアルタイムに取得する方法はないかと、「気象庁 情報取得」で検索してみたところ、気象庁が公開している「気象庁防災情報」を見つけました。 今回は、この「気象庁防災情報XMLデータ」を受け取...

今回は更新検知のリアルタイム性もあまり必要としていなかったこともあり、Atomフィードの更新を定期的に検知するやり方をとることに。

IFTTTではRSSフィートの更新検知トリガーが利用できるため、そのトリガーが発火した際に画像生成サーバにリクエストを投げるようにレシピを作成しました。

png画像の用意

生成されるSVG画像はベクター形式ということもあり、容量がひとつあたり数MBもありますプロントページでリスト表示する際のサムネイル画像ようには少し大きすぎるため、png画像を用意しておきました。

変換には以下のnode packageを利用。

neocotic/convert-svg
Node.js packages for converting SVG into other formats using headless Chromium - neocotic/convert-svg

感想

IFTTTのフィード更新検知が若干遅い

IFTTTのRSSフィードトリガーを使ってみて、実際に地震が発生してから更新検知イベントが発火するまでの時間が把握できてきました。ばらつきがあるもののだいたい5〜30分。恐らくIFTTTサーバから定期的に30分周期?でチェックしているからだと思います。

理想を言えば、Atomフィードの更新と同時にイベントが発火してほしいところです。気象庁のPubsubhubbub以外にもIIJのEq-Careサービス内にWebSocket APIがあります。それを使えば手間はかかるものの、現状より検知タイミングを早められるのでは期待しています。

またタイミングがあれば手を加えてみようかな。

svg→pngの変換がお手軽

svg→pngの変換がひとつのNode packageで完結できたのは非常に楽でした。

これまでsvg変換の機能をサーバに持たせようとする場合、

  • パッケージ内で利用するブラウザの関係で日本語が文字化け
  • 依存関係を満たすのに別途make installする必要

などなど手間取ることがありました。

その点今回利用しているconvert-svg-to-pngではheadless chromeを使っているらしく、導入もnpm installだけで済みました。headless chromeは各種ディストリビューションにおいても導入もパッケージマネージャからできることが多いため、手軽でありがたいです。

コメント

  1. […] 分布画像を生成するシステムを作ってみました。 https://blog.icchi.me/earthquake-map-system […]