世界の地震情報の取得の色々

これは[防災アプリ開発 Advent Calendar 2023](https://adventar.org/calendars/9301) 19日目の記事です。

←18:[緊急地震速報を複数対応したはなし](https://maggenetto.github.io/FukuokaMGNTCam/2023Advent.html)(福岡市のとある地震観測者さん)
20→:[気象庁XMLの台風解析・予報情報電文を使用して台風情報を描画する備忘録 その2](https://qiita.com/oruponu/items/817d949f944e090b45cb)(のたさん)

# 前書き
こんにちは。いちはいと言います。岐阜市で地震観測をしています(GifuCam)。初参加失礼します。日記的なものは長くなるので [ここ](https://github.com/Ichihai1415/md-blog/blob/main/2023/12/adventc.md)にあります。地学を習った感想などあります。

だいぶ適当で文も単語もおかしいですが許してください。

世界の地震情報取得でおなじみと言えばUSGSだと思いますが、ここでは他のも少し紹介します。
だいたい「[WorldQuakeViewer](https://github.com/Ichihai1415/WorldQuakeViewer)」を作っている経験則です。

# 取得
## 取得URLについて
取得URL例に`end=`などとついていることがあります。この場合この日時までの情報(yyyy-MM-ddだけの場合00:00:00となるため実質その1日前まで)しか取得できません。このパラメータを消すのも手ですが、ものによっては応答が遅くなります(GFZなど)。`2100-01-01`などめっちゃ未来にすればおそらく問題ないですが、普通に毎回現在の情報が切れないようにURLを設定するのが一番いいでしょう。

各機関から取得するためのURLがあるWebサービスのページは[データの処理](https://qiita.com/Ichihai1415/items/be5b7575246ed54a77e4#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%87%A6%E7%90%86)にあります。

## USGS
アメリカ地質調査所、United States Geological Survey
- https://www.usgs.gov/
- https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%9C%B0%E8%B3%AA%E8%AA%BF%E6%9F%BB%E6%89%80

NEIC(国立地震情報センター、National Earthquake Information Center)
- https://www.usgs.gov/programs/earthquake-hazards/national-earthquake-information-center-neic
- https://en.wikipedia.org/wiki/National_Earthquake_Information_Center

Webサービス:https://earthquake.usgs.gov/earthquakes/feed/
USGSの地震情報ページのDownloadから専門的(?)なデータを取得でき、例えば`Station List`では震度分布図を作ることができますがこの記事では割愛します。

## EMSC
ヨーロッパ地中海地震学センター、European-Mediterranean Seismological Centre、Centre sismologique euro-méditerranéen(CSEM)
- https://www.emsc-csem.org/
- https://ja.wikipedia.org/wiki/%E3%83%A8%E3%83%BC%E3%83%AD%E3%83%83%E3%83%91%E5%9C%B0%E4%B8%AD%E6%B5%B7%E5%9C%B0%E9%9C%87%E5%AD%A6%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC

Webサービス:https://seismicportal.eu/

USGS(NEIC)やGFZを含めた多くの機関の情報がまとまったもの(?)を取得できるので早い…はずですが、なぜか大きい規模のものは遅いです。

https://x.com/ProjectS31415_1/status/1710578578566602907?s=20

↑USGSのPTWC、NTWCのカタログ(IDがpt、at(詳細は後述))どころかUSGSカタログ(IDがus)のが出てもEMSCは出ていない(正確にはWebページには出ているがWebサービスには出ていない状態)
WebSocketもありますが、フィルター不可?だしこっちでも遅いしで特に変わらない気がします。

## GFZ
GFZドイツ地球科学研究センター、GFZ German Research Centre for Geosciences (GFZ:Geo Forschungs Zentrum (Geo-research Centre))
- https://www.gfz-potsdam.de/
- https://en.wikipedia.org/wiki/GFZ_German_Research_Centre_for_Geosciences

Webサービス:https://geofon.gfz-potsdam.de/
早い(たまに遅い)。応答が遅くなる?ようなので1req/mまでにしたほうがいいと思います。
早いですが初報はほぼマグニチュードがmbのためM6.5で飽和し実際より小さくなる点注意してください(後述)。

https://x.com/ProjectS31415_1/status/1730961072235122930?s=20

↑USGSのPTWC、NTWCのカタログより早い

## INGV
(おまけ)
イタリア国立地球物理学火山学研究所、Istituto Nazionale Geofisica e Vulcanologia
- https://www.ingv.it/
- https://ja.wikipedia.org/wiki/%E3%82%A4%E3%82%BF%E3%83%AA%E3%82%A2%E5%9B%BD%E7%AB%8B%E5%9C%B0%E7%90%83%E7%89%A9%E7%90%86%E5%AD%A6%E7%81%AB%E5%B1%B1%E5%AD%A6%E7%A0%94%E7%A9%B6%E6%89%80

Early-est(http://early-est.rm.ingv.it/) の機関。

# データの処理
WebサービスはFDSN(国際デジタル地震計ネットワーク連盟、International Federation of Digital Seismograph Networks)のデータ仕様に基づいているものが多いです。
- https://www.fdsn.org/
- https://en.wikipedia.org/wiki/International_Federation_of_Digital_Seismograph_Networks
- https://www.fdsn.org/webservices/

## GeoJSON
### 概要
詳細:https://geojson.org/
JSONと同じように処理できます。主に地図データとして使われる形式ですが、地震情報としては、`"type": "FeatureCollection"`が主で、`properties`に各情報、`Point`に震源情報があります。

- USGS:https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php
- USGS:https://earthquake.usgs.gov/fdsnws/event/1/#format-geojson (上のものが推奨されています)
- EMSC:https://www.seismicportal.eu/fdsn-wsevent.html (formatを`json`に)
- EMSC:https://www.seismicportal.eu/realtime.html (WebSocket、`"type": "Feature"`です)

```json:USGSの例(一部抜粋)
"features": [
{
    "type": "Feature",
    "properties": {
    //各情報(EMSCのはここにも震源情報が)
    },
    "geometry": {
        "type": "Point",
        "coordinates": [
            -98.5503,//経度(緯度ではない!)
            18.3866,//緯度(経度ではない!)
            44.388//深さ(EMSCはマイナス)
        ]
    }
}
```

### 利点
- USGSはPAGERを取得できるのはこれだけ?
- (少なくともC#は)XMLより処理しやすい(個人の感想)

### 注意
- geometryのcoordinatesは[x,y(,z)]基準つまり[経度,緯度(,高さまたは深さ)]なので間違えないように。
- 機関によって構造が違う。

## QuakeML
### 概要
詳細:https://quake.ethz.ch/quakeml/
XMLと同じように処理できます。

- USGS:https://earthquake.usgs.gov/earthquakes/feed/v1.0/quakeml.php
- USGS:https://earthquake.usgs.gov/fdsnws/event/1/#format-xml (上のものが推奨されています)
- EMSC:https://www.seismicportal.eu/fdsn-wsevent.html
- GFZ:https://geofon.gfz-potsdam.de/waveform/builder-event.php
- Early-est:http://early-est.rm.ingv.it/monitor.xml

```xml:USGSの例(一部抜粋)
<q:quakeml>
    <eventParameters>
        <event>
            <origin>
                <!--詳細-->
                <depth>
                    <value>44388</value><!--単位はメートル!-->
                    <uncertainty>4683</uncertainty>
                </depth>
            </origin>
            <magnitude>
                <!--マグニチュード関連-->
            </magnitude>
        </event>
        <event>
            <!--同様-->
        </event>
    </eventParameters>
</q:quakeml>
```

### 利点
- GeoJSONより詳しい情報があります(多分...)。

### 注意
- おそらくXML名前空間を理解する必要があり、(例えばC#では`XmlNamespaceManager`が必要など)特に初めての場合GeoJSONより大変かもしれません。
- 深さの単位は**メートル**のようです。kmにするとマントルどころか地球を抜けて月より遠い宇宙になることがあります(地球の直径+地球から月までの距離:約40万km)。
- EMSCはIDがunidしかなく、詳細情報のページに飛ぶURLを作るには[eventid](https://www.seismicportal.eu/eventid/)で取得する必要があります。
- Early-estは時々1点M6クラスのが出ることがあるので観測点数やクオリティコードで除外しましょう。Mがないとき(初報など)もあります。

https://x.com/ProjectS31415_1/status/1759140101932925261?s=20

## テキスト
### 概要
簡単なテキスト形式(正確にはfdsnws-event text)

- USGS:https://earthquake.usgs.gov/fdsnws/event/1/#format-text (Real-time GeoJSON Feedsが推奨されています)
- EMSC:https://www.seismicportal.eu/fdsn-wsevent.html (formatを`text`に)
- GFZ:https://geofon.gfz-potsdam.de/waveform/builder-event.php (formatを`text`に)

```text
#EventID|Time|Latitude|Longitude|Depth/km|Author|Catalog|Contributor|ContributorID|MagType|Magnitude|MagAuthor|EventLocationName|EventType
//|EventTypeはないものも
```

### 利点
- 処理が簡単。
- データ量が少ない。

### 注意
- 情報が少ない。(WorldQuakeViewerで表示しているものはほぼあるので十分と言えば十分)
- |EventTypeが`|`ごとないものがありOutOfRangeに注意。
- Author,Catalog,Contributorが似ていて分かりにくく空白のものもある。

他にもありますが一般的なのはこれくらいです。

# 情報の詳細情報
## 全体
### 震央名
USGSは都市からの距離、他は主にFlinn-Engdahl Region(FE地域)となっています。
https://en.wikipedia.org/wiki/Flinn-Engdahl_regionalization
日本語震源名は、FE地域コードから気象庁コード表のAreaEpicenterDetail(詳細震央地名)から1000を引いたものの番号のものを参照すればいいですが、緯度経度からFE地域コードを求めるものがWebのもの(USGSやEMSCなどにあります)しか見つからなかったため、毎回Webサービスを使うと遅いしリクエスト数が多くなるしというわけですべて取得しcsv化しました。
https://github.com/Ichihai1415/LL2FERC/blob/release/codes.csv
いろいろ問題がありそうな気はしますが、使ってみてください。直接求められるC#のライブラリもあります。

### 深さ
10km,10.0km,といった値は仮の値である可能性に注意する必要があります。USGSには以下の記述があります。
https://earthquake.usgs.gov/data/comcat/index.php#depth
```text
Sometimes when depth is poorly constrained by available seismic data, the location program will set the depth at a fixed value. For example, 33 km is often used as a default depth for earthquakes determined to be shallow, but whose depth is not satisfactorily determined by the data, whereas default depths of 5 or 10 km are often used in mid-continental areas and on mid-ocean ridges since earthquakes in these areas are usually shallower than 33 km.
```

### マグニチュード
マグニチュードにはいくつか種類がありそれぞれ特性があるので表示を推奨します。
詳細(USGSの説明):https://www.usgs.gov/programs/earthquake-hazards/magnitude-types

## USGS
### カタログ
https://earthquake.usgs.gov/fdsnws/event/1/catalogs にカタログ(ID:us12345678の`us`の部分)の一覧があります。大きな地震(特に津波の可能性があるもの)はPTWC→NTWC→USGSの順で出ることが多いです。自分で同一地震判断するのも悪くないですが、GeoJSONの`ids`に同じ地震のidがまとめられているのでこれを使うといいでしょう(ただし深発等で精度が低いとUSGS側で統合できてない時があります)。(例:`,pt123456,at234567,us345678,`)

## MMI
ShakeMapで表示されるものと同じ改正メルカリ震度階級です。**最大推定震度**であることに注意してください。~~だいたい更新で下がってくことが多いです。~~そんなこともない気がする(特に日本の最初の方はなぜか小さく出る)
気象庁震度階級との対応ですが、私は過去のデータでいい感じに求めたものを提唱(?)しています。詳細は[改正メルカリ震度階級から最大速度を求める式を作り、気象庁震度階級を計算する(式の例付き)](https://qiita.com/Ichihai1415/items/2e14fc2356ec8e140291)で。

https://x.com/ProjectS31415_1/status/1700688885683228911?s=20

## Alert
PAGERの大きいものです(redとorangeだったらred)。MMIより少し遅れて発表されます。MMIが更新で下がっていくと一緒に下がることがあります。「保留中」として`pending`という値もあります。主に過去に同じ規模のものが少ない場所、規模が大きい場合に出ます。大きな地震はしばらくしてみてみると上がっていることもあります。
このことも上の「改正メルカリ震度階級から...」の記事で紹介しています。

# その他
## 地図
地図は[NaturalEarth](https://www.naturalearthdata.com/)のデータを使うのが定番でしょう。

起伏が分かるものやプレート境界がある画像だといいでしょう。
WorldQuakeViewerでは[tectonicplates](https://github.com/fraxen/tectonicplates)を使用しています。マイクロプレート(小規模なプレート)も含まれています。
https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88#%E5%B0%8F%E8%A6%8F%E6%A8%A1%E3%81%AA%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88

## 津波情報
私はやったことがありませんができそうなのものを。

NOAA(アメリカ海洋大気庁、National Oceanic and Atmospheric Administration)のページには津波情報のAtomフィードがあります。XMLと同じように処理できます。[(詳細)](https://www.rfc-editor.org/rfc/rfc4287)
PTWC(太平洋津波警報センター、Pacific Tsunami Warning Center)のほうでいいと思います。太平洋の津波情報(テキスト形式だが人間が読みやすいようになっているため処理は難しい)のリンクが載るようなので(ntwc.arh.noaa.gov/events/.....txt)これを頑張って処理すれば表示できるかもしれません。
- https://www.tsunami.gov/?page=productRetrieval
- https://www.tsunami.gov/events/xml/PHEBAtom.xml

# 結論(何を使えばいいのか)
- 正確さはUSGSのGeoJSONやQuakeML、早さならEarly-est、間がGFZ。
- 詳しい情報が欲しいならGeoJSONやQuakeML、そこまでならtext形式。