世界の地震速報API(アメリカ地質調査所: USGSや欧州地中海地震センター: EMSC)が提供するデータは、通常「マグニチュード($M_w$)」「震源の緯度・経度」「深さ」に限られており、日本の気象庁(JMA)が発表するような「各地の震度(震度1〜7、5弱/強・6弱/強)」の数値は含まれていません。
しかし、防災意識の高い日本人ユーザーにとって、「M6.8の地震が発生した」と言われるよりも「東京で震度4、震源直下の都市で震度6弱が観測された」と伝えられる方が、被害規模や揺れの危険度を直感的に把握できます。そこでQuakeViewer3Dでは、世界中あらゆる震源データから各地の最大地動加速度(PGA: gal)・最大地動速度(PGV: cm/s)および気象庁震度を瞬時に推計する距離減衰アルゴリズム(GMPE: Ground Motion Prediction Equation)を独自に組み込みました。
1. 司・翠川(1999)の距離減衰式による工学的基盤PGVの推計
震源で解放された地震波エネルギーは、地中を放射状に伝播する過程で幾何学的拡散と地殻の粘性による非弾性減衰($Q$値減衰)を受けます。QuakeViewer3Dでは、日本の地震工学で最も信頼性の高い司・翠川(1999)の距離減衰式を採用し、まず「工学的基盤($V_s \fallingdotseq 400\sim 600\text{m/s}$の硬質岩盤層)」における最大地動速度 $PGV_{600}$ を算出します:
// 司・翠川(1999)に基づくPGV(cm/s)の計算式
// Mw: モーメントマグニチュード, X: 断層最短距離(km), D: 震源深さ(km)
function calculateBedrockPGV(Mw, epicentralDist, depth, quakeType) {
const X = Math.sqrt(epicentralDist * epicentralDist + depth * depth);
let a, b, c, d, k;
if (quakeType === 'interplate') {
// プレート境界地震(海溝型)
a = 0.58; b = 0.0038; c = 0.0028; d = 0.50; k = -1.29;
} else if (quakeType === 'intraplate') {
// スラブ内深発地震
a = 0.61; b = 0.0038; c = 0.0028; d = 0.50; k = -1.18;
} else {
// 内陸地殻内地震(直下型)
a = 0.58; b = 0.0038; c = 0.0028; d = 0.50; k = -1.41;
}
const logPGV = a * Mw - b * X - Math.log10(X + c * Math.pow(10, d * Mw)) + k;
return Math.pow(10, logPGV);
}
この式により、浅い直下型地震における震源近傍の飽和現象(距離がゼロに近づいても無限大にならない物理的補正項 $c \cdot 10^{d M_w}$)と、遠距離における指数関数的減衰を高精度にモデル化しています。
2. 表層地盤増幅率(AVS30)による地表の揺れ補正
地震動は、地下深部の硬い岩盤から地表付近の柔らかい土層(沖積低地や埋立地)に侵入する際、波の速度が低下する代わりに振幅が数倍に跳ね上がります。これが「同じ市町村内でも川沿いや埋立地だけ揺れが格段に激しい」理由です。
QuakeViewer3Dでは、国土交通省や防災科研が公開する日本全国のAVS30(地表から深さ30mまでの平均S波速度 [m/s])メッシュデータを参照し、松岡・翠川(1994)の経験式を用いて地盤増幅率 $ARV$ を適用しています:
$$ARV = 1.83 \times (AVS30)^{-0.66}$$地表における最大地動速度: $$PGV_{surface} = PGV_{600} \times ARV$$
山地や台地(AVS30 > 500m/s)では $ARV \approx 0.8\sim 1.2$ に収まる一方、軟弱な干拓地や河口付近(AVS30 < 150m/s)では $ARV \approx 2.5\sim 3.2$ に達し、基盤の揺れが地表で3倍近くに増幅されるダイナミクスを忠実に再現しています。
3. PGVから気象庁計測震度(JMA Intensity)への変換
地表の最大地動速度 $PGV_{surface}$ から、気象庁が定義する「計測震度 $I$」への変換には、翠川ら(1999)による相関関係式を用いています:
// 地表PGV(cm/s)から気象庁計測震度への変換
function pgvToJmaIntensity(pgv) {
if (pgv <= 0.05) return { raw: 0, text: "震度0", class: "shindo-0" };
// 翠川ら(1999)の経験的変換式
const I = 2.68 + 1.72 * Math.log10(pgv);
if (I < 0.5) return { raw: I, text: "震度0", class: "shindo-0" };
if (I < 1.5) return { raw: I, text: "震度1", class: "shindo-1" };
if (I < 2.5) return { raw: I, text: "震度2", class: "shindo-2" };
if (I < 3.5) return { raw: I, text: "震度3", class: "shindo-3" };
if (I < 4.5) return { raw: I, text: "震度4", class: "shindo-4" };
if (I < 5.0) return { raw: I, text: "震度5弱", class: "shindo-5m" };
if (I < 5.5) return { raw: I, text: "震度5強", class: "shindo-5p" };
if (I < 6.0) return { raw: I, text: "震度6弱", class: "shindo-6m" };
if (I < 6.5) return { raw: I, text: "震度6強", class: "shindo-6p" };
return { raw: I, text: "震度7", class: "shindo-7" };
}
これにより、地震発生直後にUSGSから送られてくる速報値(震央緯度経度・深さ・Mw)を受け取ったわずか数ミリ秒後に、日本の主要都市(札幌・仙台・東京・名古屋・大阪・福岡など)の予測震度を即座にUI上に展開することが可能となりました。
4. メルカリ震度階級(MMI)とJMA震度の双方向リアルタイム変換
QuakeViewer3Dはグローバルな英語圏ユーザーにも利用されるため、世界基準の改正メルカリ震度階級(Modified Mercalli Intensity: MMI I〜XII)との双方向変換マッピングも実装しています。
- JMA 震度3 ↔ MMI IV(軽微な揺れ): 屋内にいる人の大半が感じ、食器や窓がカタカタと音を立てる。
- JMA 震度4 ↔ MMI V〜VI(中程度の揺れ): 眠っている人の大半が目を覚まし、不安定な置物が倒れる。
- JMA 震度5弱〜5強 ↔ MMI VII(強い揺れ): 立っていることが困難になり、耐震性の低い家屋に壁のひび割れが生じる。
- JMA 震度6弱〜6強 ↔ MMI VIII〜IX(激しい揺れ): 壁の崩落、家具の転倒・移動、地割れが発生。
- JMA 震度7 ↔ MMI X〜XII(破滅的な揺れ): 多くの建物が倒壊し、地滑りや地形変動が発生。
ユーザーの言語設定(日本語 / 英語)に応じて、HUDや地図上のピンにJMA震度バッジまたはMMIバッジがシームレスに切り替わるレスポンシブなローカライズを行っています。
5. まとめと即時防災情報プラットフォームとしての展望
単なる「過去の記録の表示」から「物理モデルに基づく各地の揺れの即時シミュレーション」へと踏み込んだことで、QuakeViewer3Dは教育ツールとしても実用的な防災ダッシュボードとしても飛躍的な進化を遂げました。
今後も緊急地震速報(EEW)のWebSocketフィードとの連携や、長周期地震動階級(高層ビル・免震構造の共振)の推計機能など、最先端の地震工学知見をブラウザ上で誰もが直感的に触れられるオープンな技術として実装し続けてまいります。