地図 (1 つの画面の左の広い所。スマホの形は「地図」のタブ。docs/ui.md) は MapLibre GL JS で描く (選んだ理由は docs/design.md の 4 章)。
下地は国土地理院のシームレス空中写真で、その上に道路・地名・施設の記号 (地理院地図Vector) と付加情報の層を重ねる。層はいつも全部出し、オン・オフは置かない (持ち主の決定、2026-11-14)。例外はハザードマップで、色がぶつかるので、なし・洪水・土砂災害・津波から 1 つだけを選ぶ (既定はなし)。
色の意味は「出典と注意」の窓の「地図の見方」に書く (#lib/map/style.ts の MAP_LEGEND)。前に層のオン・オフを覚えていた localStorage の sonae.map.layers は読まず、開いたときに消す。
機能は Zero Quake の「付加情報を重ねて切り替えられる」ことだけを参考にした。コードは読んでいない。
| 層 | データ | 出典・ライセンス |
|---|---|---|
| 下地 (いつも) | 地理院タイル「写真」 https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg (ズーム 2〜18) |
国土地理院コンテンツ利用規約。申請は要らず、出典「国土地理院」と地理院タイル一覧へのリンクを示す。ズーム 2〜8 は世界衛星モザイク、9〜13 は全国ランドサットモザイク、14〜18 はシームレス空中写真なので、一覧の備考どおり Landsat8・GEBCO・NASA LP DAAC/USGS EROS・GRUS (© Axelspace) の出典も出す |
| 各地の震度 | 気象庁の地震情報 (XML) の地域ごとの震度で、地震情報/細分区域の面を塗る。地域の上に震度のラベル | 面: 気象庁 予報区等 GIS データ 「地震情報/細分区域」(2024-05-20) を簡略化。気象庁ホームページの利用規約 (公共データ利用規約 第 1.0 版、CC BY 4.0 と互換)。色は気象庁の配色の指針 |
| 震源 | 地震情報の震源 (新しい 50 件の点。色は深さ、大きさは M、新しいものほど上)。選んだ地震は × の印 | 気象庁 防災情報 XML・P2P地震情報 |
| 津波の警報・注意報 | いま出ている津波の区分で、津波予報区の線を塗る (大津波警報は太さ 2 倍) | 線: 気象庁 予報区等 GIS データ「津波予報区」(2024-05-20) を簡略化。利用規約は同じ |
| 長周期地震動階級 | 地図に出している地震の、長周期地震動に関する観測情報 (VXSE62) の地域ごとの階級で、細分区域を階級の色の太い枠で囲む (階級 1 以上)。色の決め方は docs/design.md の 2.7 | 気象庁 防災情報 XML。区域の面は上の細分区域 |
| 緊急地震速報 | 出ている緊急地震速報の震央 (×) と、警報が出た地域 (細分区域の面を赤く)。予想震度は出さない | 中身は Wolfx Project・P2P地震情報 (どちらも非公式で無保証)。面は上の細分区域 |
| 気象警報・注意報 | いま出ている気象警報・注意報のいちばん高い段で、市町村等の面を塗る (透明度 0.6、震度の面の下)。色は配色の指針 表 1-1 (docs/design.md の 4 章) | 中身: 気象庁 防災情報 XML (VPWW55〜61)。面: 気象庁 予報区等 GIS データ「市町村等(気象警報等)」(2026-02-26。令和 8 年 5 月下旬からの区域) を簡略化。利用規約は同じ |
| 海外の地震 | 海外の地震の新しい 50 件の点 (白い縁の丸。色は深さ、大きさは M)。選んだ海外の地震は × の印で、地図を引いて (ズーム 4) そこへ寄せる | USGS の GeoJSON フィード (「Credit: U.S. Geological Survey」、U.S. Public Domain)・EMSC の WebSocket (「Credit: EMSC-CSEM SeismicPortal」、CC BY 4.0)・GeoNet (謝辞の文、CC BY 3.0 NZ)・中央氣象署 (政府資料開放授權條款 第 1 版) |
| 火山 | 受けた噴火警報・予報で警戒の段が 2 以上の火山と、選んだ火山の情報の火山を三角の印で置く。色は警戒の段 (気象庁の配色の指針 表 1-2)、中に段の数字。選んだ火山は大きく出し、そこへ寄せる | 中身: 気象庁 防災情報 XML (VFVO50・56)。位置は電文の位置、噴火速報のように位置の無いものは気象庁ホームページの活火山の一覧 (https://www.jma.go.jp/bosai/volcano/const/volcano_list.json) を tools/volcanoes/build.sh で static/areas/volcano-points.json にしたもの。どちらも気象庁ホームページの利用規約。一覧の JSON はホームページの表示用で、形が変わったら作り直す |
| 区域の境界 | 地震情報/細分区域の境界線 | 気象庁 予報区等 GIS データ |
| 現在地 | 右上のボタンを押している間だけ、ブラウザの navigator.geolocation.watchPosition の位置に白い縁の青い点と、誤差 (accuracy、メートル) の円を描く。初めて取れたときだけ寄せる |
端末の位置。サーバーには送らない (描くのは端末の中だけ) |
| 活断層 | 地理院タイル「活断層図(都市圏活断層図)」 https://cyberjapandata.gsi.go.jp/xyz/afm/{z}/{x}/{y}.png (ズーム 11〜16) |
国土地理院コンテンツ利用規約。出典「国土地理院 (都市圏活断層図)」。引用するときは調査者名を書く (一覧の備考)。大きく寄せたときだけ出る |
| 道路 | 地理院地図Vector (国土地理院最適化ベクトルタイル) の道路中心線 (RdCL)。高速道路 (ズーム 6 から)・国道 (7)・都道府県道 (10)・ほかの道 (13) を、黒い縁取りの上に明るい線で引く (roadLayers) |
下の「地理院地図Vector」 |
| 地名と施設の記号 | 地理院地図Vector の注記 (Anno)。国土地理院のスタイル std.json の注記の層 9 つを tools/gsi/build.ts で取り出し、字を白・縁を黒く太くし、字体を端末の字体に替えたもの (static/map/gsi/anno.json)。記号は同じリポジトリのスプライトを自分で配る (static/map/gsi/sprite/) |
下の「地理院地図Vector」 |
| 指定緊急避難場所・指定避難所 | 地理院タイルの GeoJSON。指定緊急避難場所は災害ごとの skhb01〜skhb08 (洪水・崖崩れ等・高潮・地震・津波・大規模な火事・内水氾濫・火山現象)、指定避難所は sih。タイルはズーム 10 だけなので、ズーム 14 から見ている範囲のタイル (4 つまで) を読み、同じ施設を 1 つにまとめて緑の「避」の印で置く。押すと名前・住所・対応する災害と、指定避難所かどうかを出す |
国土地理院コンテンツ利用規約と「ご利用上の注意」。出典「国土地理院」。最新でないことや載っていない施設があるので、吹き出しと「地図の見方」に「市町村の情報で確かめてください」と書く。「指定緊急避難場所」(逃げる場所。災害ごと) と「指定避難所」(暮らす場所) は分けて書く |
| ハザードマップ | 重ねるハザードマップのラスタータイル (https://disaportaldata.gsi.go.jp/raster/<層>/{z}/{x}/{y}.png、ズーム 2〜17)。洪水浸水想定区域 (想定最大規模) 01_flood_l2_shinsuishin_data・土砂災害警戒区域 05_dosekiryukeikaikuiki・05_kyukeishakeikaikuiki・05_jisuberikeikaikuiki・津波浸水想定 04_tsunami_newlegend_data。地図の左上の「ハザードマップ」で、なし・洪水・土砂災害・津波から 1 つだけ選ぶ (色がぶつかるので重ねない。既定はなし、端末に覚える sonae.map.hazard)。選んだものの公式の凡例の画像 (https://disaportal.gsi.go.jp/hazardmap/copyright/img/) をその下に出す |
ハザードマップポータルサイトのオープンデータ: URL からそのまま読んでアプリで使ってよく (商用・非商用とも)、申請の記載は無い。出典「ハザードマップポータルサイト」。国が作ったように見せない。土砂災害警戒区域は国土数値情報の利用規約と都道府県の条件にも従う (県ごとの条件は確かめていない)。洪水・津波は載っていない県・川があるので、凡例の下に「色が無くても安全とは限りません」と書く |
細分区域と津波予報区の GeoJSON は tools/areas/build.sh で作り、static/areas/ に置く (mapshaper で簡略化。
細分区域 約 1.7MB・gzip 約 220KB、津波予報区 約 560KB・gzip 約 86KB)。気象庁の GIS データの更新 (年に 1〜2 回) を
受けたら作り直す。GIS データのページにある「国土地理院長の承認を得て…」の文は、気象庁がそのデータを作るときの承認で、
sonae の画面には気象庁の GIS データの出典を出す。
市町村等 (気象警報等) の面 warning-areas.geojson (約 1.4MB・gzip 約 280KB。簡略化は 600m) と、市町村等の表 cities.json
(名前・府県予報区・一次細分区域・まとめた地域・地震情報/細分区域) は tools/areas/build-weather.sh で作る。
コンテナの bun の slim には unzip が無いので、zip は tools/areas/zip.ts で開く。
- 元: GIS データの
20260226_AreaInformationCity_weather_GIS.zip(日付の違う zip は同じ所に置かない)・20240520_AreaForecastLocalE_GIS.zip・技術資料のコード表jmaxml_*_Code.zip(2026-11-10) - 名前と、属する一次細分区域・府県予報区はコード表の AreaInformationCity と関係表から取る (気象警報・注意報で使う行だけ。1,805 件)
- 地震情報/細分区域はコード表に対応が無いので、市町村等の面の中の 1 点がどの細分区域の面に入るかで決める
- GIS データのコードの無い面 (北方領土と、境界の決まっていない土地の 16 件) は除く
確かめた日: 2026-11-14 (国土地理院の公式のページと、配信の応答で)。
- 配信:
https://cyberjapandata.gsi.go.jp/xyz/optimal_bvmap-v1/optimal_bvmap-v1.pmtiles(PMTiles の 1 ファイル、約 16.9 GB、ズーム 4〜16)。範囲 (Range) を指定して要るタイルだけを読み、CORS は*。pmtiles(Protomaps、BSD-3-Clause) で MapLibre に読ませる。 前の{z}/{x}/{y}.pbfも応答するが、データは 2023-10 で止まり、README に「公開を停止する予定」とあるので使わない - 位置づけ: 試験公開 (2022-09 から「公開終了まで」)。URL や属性が変わることがあると書かれている。変わったら
GSI_VECTOR_URLとtools/gsi/build.tsを直す - 条件: README は国土地理院コンテンツ利用規約 (公共データ利用規約 第 1.0 版) で使えるとしている。基本測量成果ではないので測量法の申請は要らない。出典は「国土地理院最適化ベクトルタイル」と書き、加工したことも書く。 リポジトリに LICENSE のファイルは無い (GitHub のライセンス表示も無い)。スタイルとスプライトもこの README の条件で使えると読んだ
- 読む量: ベクトルのタイルは 1 枚 20〜110 KB。層ごとの最小のズームより引いているときは読まない (日本全体を見ているときは読まない)。PMTiles の目次は初めに 16 KB と、要る所のディレクトリを読む
- 字体 (glyphs) は読まない。 MapLibre 6 は、スタイルに
glyphsの URL が無いと、字を端末の字体でその場で描く (TinySDF)。漢字・かなはもともと端末で描いている。そのため PBF の字体を作って配る必要もなく、外から字体を読むことも無い。 字体の名前は"Noto Sans JP", sans-serifで、入っていない端末は端末の既定のゴシックで描く。持ち主の頼みは「Noto Sans JP から PBF を作って自分で配る」だったが、字体を 1 つも読まずに済むこの形にした (束も 0 KB) - 記号 (スプライト): 国土地理院のスタイルのスプライト (
sprite/std、約 110 KB) をtools/gsi/build.tsで写して自分で配る - 写真の上で読む: 地名は白い字に黒い縁 (幅 1.6)、道路は黒い縁取りの上に明るい線。国土地理院のスタイルの道路の色 (地図の地に合わせた色) は写真の上で沈むので使わない
| もの | 理由 |
|---|---|
| プレート境界 | 国土地理院の地理院タイルの一覧にも、気象庁の GIS データにも無い。ほかの機関のデータ (研究用の境界の線) は利用条件をそれぞれ確かめる必要があり、公式のデータに絞る方針から外した |
| 観測点ごとの震度の点 | 震度観測点の緯度・経度を、気象庁が機械で読める形で出していない。地域 (細分区域) ごとの震度で塗る |
| PMTiles (自分で作る) | 気象庁の区域の GeoJSON は小さく、そのまま読める。地理院地図Vector は国土地理院が配る PMTiles をそのまま読む |
| 指定避難所・避難場所の全国のデータを自分で配る | 全国で数十万件あり、画面の束に入れるには大きい。ズーム 14 から見ている所のタイルだけを国土地理院から読む |
- カメラは飛ばさない (
jumpTo)。寄せるのは、選んだ地震か、出ている緊急地震速報が替わったときと、スマホの形で地図のタブに移ったときにその震央が画面の外にあるときだけ (続報で勝手に動かない)。 - 写真の下地はズーム 8 まで (世界衛星モザイク) 海の継ぎ目が目立つので、暗い所を少し持ち上げ、明暗の差と色を抑える (ズーム 10 で元に戻す)。
- 震源の点の色は深さ (30・100・300 km で分ける)。震度の色と取り違えないよう、震度は面の色とラベル、震源は丸で描く。色の意味は「出典と注意」の「地図の見方」に書く。
- 地図を回さない (北が上)。
- 動くのは緊急地震速報の震央の × が出たときの 3 回の脈打ちだけ (
transform: scale)。動きを減らす設定では止まる。 - WebGL が使えない端末では地図を出さず、一覧で見てもらう。
- MapLibre (約 1.1MB) は画面を描いた後に動的 import で読む (最初の表示と一覧は待たせない)。