library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(sf)
## Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
data_dir <- "data"
data_file <- "ishikawa-central-evacuation-space.csv"
evac_data <- readr::read_csv(file.path(data_dir, data_file))
## Rows: 643 Columns: 40
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (24): ID, 名称, 名称_カナ, 名称_英字, 町字ID, 所在地_連結表記, 所在地_都道府県, 所在地_市区町村, 所在地_町字, ...
## dbl (11): _id, 全国地方公共団体コード, 所在地_全国地方公共団体コード, 緯度, 経度, 市区町村コード, 災害種別_洪水, 災害種別_...
## lgl (5): 内線番号, 連絡先FormURL, 連絡先備考(その他、SNSなど), 画像, 画像_ライセンス...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.金沢市オープンデータポータルでは、石川中央都市圏 指定緊急避難場所一覧が利用可能です。このデータを利用して、津波の指定緊急避難場所の位置と、想定される津波浸水深とを重ねて地図で表示してみます。
なおこの記事は、11月15日開催のKanazawa.R #4で発表する内容の一部となっております。
指定緊急避難場所
内閣府:「避難場所に関すること」によると、指定緊急避難場所とは
災害の危険から命を守るために緊急的に避難をする場所であり、市町村長により、洪水、崖崩れ・土石流・地滑り、地震、津波、大規模な火事等の災害種別ごとに指定が行われます。
とのことです。
「指定緊急避難場所」に似た言葉として「指定避難所」がありますが、後者は「災害が発生した場合に避難をしてきた被災者が一定期間生活するための施設」ということです(内閣府:「指定緊急避難場所」と「指定避難所」の違いについて )。
金沢市内では、指定緊急避難場所には以下のような看板があります。

データ
指定緊急避難場所のデータ
はじめに触れたように、 金沢市オープンデータポータルから石川中央都市圏 指定緊急避難場所一覧のCSVファイルがダウンロードできます。
なお、いしかわオープンデータカタログからは、石川県全体の「指定緊急避難所一覧」のデータがダウンロードできるようになっています。「指定緊急避難所」とありますが、これは指定緊急避難場所のようです。
津波浸水想定データ
国土数値情報にて全国の津波浸水想定データが公開されています。ここから石川県分をダウンロードします。ダウンロードされたファイルのうち、GeoJSONのファイル (A40-17_17.geojson) を使用します。
データ読み込み
ダウンロードしたデータを読み込みます。データはdataディレクトリに入れておきました。
まず、指定緊急避難場所のデータです。読み込んだデータはevac_dataというデータフレームに格納しておきます。
つづいて、津波浸水想定データです。元のCRSはJGD2011ですが、これをWGS84に変換しておきます。
tunami_file <- "A40-17_17.geojson"
tunami_data <- st_read(file.path(data_dir, tunami_file)) |>
st_transform(crs = 4326) # WGS84
## Reading layer `A40-17_17' from data source
## `/Users/hiroki/Documents/GIS/A40-17_17_GML/A40-17_17.geojson'
## using driver `GeoJSON'
## Simple feature collection with 46630 features and 3 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 136.244 ymin: 36.29098 xmax: 137.3607 ymax: 37.85636
## Geodetic CRS: JGD2011データ確認
指定緊急避難場所のデータの先頭部分を表示します。
head(evac_data, n = 10)
## # A tibble: 10 × 40
## `_id` 全国地方公共団体コード ID 名称 名称_カナ 名称_英字
## <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1 1 172014 AA0000001280 三谷公民館(指定避難場所)…… ミタニコウミンカ… <NA>
## 2 2 172014 AA0000001281 三谷小学校(指定避難場所)…… ミタニショウガッ… <NA>
## 3 3 172014 AA0000001282 薬師谷公民館(指定避難場所)… ヤクシダニコウミ… <NA>
## 4 4 172014 AA0000001283 不動寺小学校(指定避難場所)… フドウジショウガ… <NA>
## 5 5 172014 AA0000001284 柳瀬川つつみ公園(指定避難場… ヤナセガワツツミ… <NA>
## 6 6 172014 AA0000001285 湖陽児童公園(指定避難場所)… コヨウジドウコウ… <NA>
## 7 7 172014 AA0000001286 湖陽緑道公園(指定避難場所)… コヨウリョクドウ… <NA>
## 8 8 172014 AA0000001287 北部公園(指定避難場所)…… ホクブコウエン(… <NA>
## 9 9 172014 AA0000001288 金沢競馬場(指定避難場所)…… カナザワケイバジ… <NA>
## 10 10 172014 AA0000001289 金沢向陽高等学校(指定避難場… カナザワコウヨウ… <NA>
## # ℹ 34 more variables: 所在地_全国地方公共団体コード <dbl>, 町字ID <chr>,
## # 所在地_連結表記 <chr>, 所在地_都道府県 <chr>, 所在地_市区町村 <chr>,
## # 所在地_町字 <chr>, 所在地_番地以下 <chr>, `建物名等(方書)` <chr>,
## # 緯度 <dbl>, 経度 <dbl>, 標高 <chr>, 電話番号 <chr>, 内線番号 <lgl>,
## # 連絡先メールアドレス <chr>, 連絡先FormURL <lgl>,
## # `連絡先備考(その他、SNSなど)` <lgl>, 郵便番号 <chr>,
## # 市区町村コード <dbl>, 地方公共団体名 <chr>, 災害種別_洪水 <dbl>, …列がたくさんあるので、どのような列なのか確認します。
colnames(evac_data)
## [1] "_id" "全国地方公共団体コード"
## [3] "ID" "名称"
## [5] "名称_カナ" "名称_英字"
## [7] "所在地_全国地方公共団体コード" "町字ID"
## [9] "所在地_連結表記" "所在地_都道府県"
## [11] "所在地_市区町村" "所在地_町字"
## [13] "所在地_番地以下" "建物名等(方書)"
## [15] "緯度" "経度"
## [17] "標高" "電話番号"
## [19] "内線番号" "連絡先メールアドレス"
## [21] "連絡先FormURL" "連絡先備考(その他、SNSなど)"
## [23] "郵便番号" "市区町村コード"
## [25] "地方公共団体名" "災害種別_洪水"
## [27] "災害種別_崖崩れ、土石流及び地滑り" "災害種別_高潮"
## [29] "災害種別_地震" "災害種別_津波"
## [31] "災害種別_大規模な火事" "災害種別_内水氾濫"
## [33] "災害種別_火山現象" "指定避難所との重複"
## [35] "想定収容人数" "対象となる町会・自治会"
## [37] "URL" "画像"
## [39] "画像_ライセンス" "備考"災害種別_\*の列が対象となる災害を表しています。
津波浸水想定データも確認します。
print(tunami_data)
## Simple feature collection with 46630 features and 3 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 136.244 ymin: 36.29098 xmax: 137.3607 ymax: 37.85636
## Geodetic CRS: WGS 84
## First 10 features:
## A40_001 A40_002 A40_003 geometry
## 1 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2468 36.2947,...
## 2 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2467 36.29722...
## 3 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2473 36.29362...
## 4 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2473 36.29471...
## 5 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2474 36.29462...
## 6 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2474 36.29372...
## 7 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2476 36.29354...
## 8 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2476 36.29336...
## 9 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2487 36.29841...
## 10 石川県 17 0.3m以上 〜 0.5m未満 POLYGON ((136.2488 36.29868...A40_003列が津波浸水深の区分になっています。どのようになっているのか確認します。
table(tunami_data$A40_003)
##
## 0.3m以上 〜 0.5m未満 0.3m未満 0.5m以上 〜 1m未満
## 10809 11713 10768
## 10m以上 〜 20m未満 1m以上 〜 3m未満 3m以上 〜 5m未満
## 103 7984 4261
## 5m以上 〜 10m未満
## 992データ変換
指定緊急避難場所のうち、災害種別で津波が指定されているものを抽出して、tunami_evacというデータフレームにします。
tunami_evac <- evac_data |>
dplyr::filter(`災害種別_津波` == 1)津波浸水想定データは、津波深の区分を順序付き因子に変換し、Levelという変数に格納します。
tunami_data <- tunami_data |>
dplyr::mutate(Level = ordered(A40_003,
levels = c("0.3m未満",
"0.3m以上 〜 0.5m未満",
"0.5m以上 〜 1m未満",
"1m以上 〜 3m未満",
"3m以上 〜 5m未満",
"5m以上 〜 10m未満",
"10m以上 〜 20m未満")))地図表示
Leaflet
Leafletを使用して地図にします。今回は、金沢市金石地区付近を表示することにします。
leafletパッケージを読み込み、パレットと保存先ディレクトリ、表示中心の座標を変数に入れておきます。
library(leaflet)
# palette
pal <- colorFactor("viridis", tunami_data$Level, ordered = TRUE,
reverse = TRUE)
# figure directory
fig_dir <- "figures"
# Kanaiwa
kanaiwa <- c(136.593827, 36.601285)Leafletで表示します。まず、金石周辺の地図を表示し、それにaddPolygons関数で津波浸水深をポリゴンとして追加し、addLegend関数でその凡例を追加します。さらにaddMarkers関数で、緊急避難場所をマーカーとして追加しています。
これでインタラクティブな地図となるのですが、このサイトではサーバーの関係でインタラクティブな地図が載せられないので、mapviewパッケージのmapshot関数でPNG画像として出力します。
leaflet(tunami_data) |>
addTiles() |>
setView(lng = kanaiwa[1], lat = kanaiwa[2], zoom = 15) |>
addPolygons(stroke = FALSE,
fillColor = ~pal(Level),
fillOpacity = 0.9) |>
addLegend(pal = pal, values = ~Level, title = "津波浸水深") |>
addMarkers(data = tunami_evac,
lng = ~`経度`, lat = ~`緯度`,
label = ~`名称`) |>
mapview::mapshot(file = file.path(fig_dir, "map.png"))出力された地図です。

tmap.mapgl
次に、tmap.mapglでも表示してみます。
このため、tmapとtmap.mapglパッケージを読み込みます。さらに表示する領域を設定し、避難場所データをtunami_evacをsf形式のオブジェクトに変換します。
library(tmap)
library(tmap.mapgl)
# bbox
lng <- kanaiwa[1] + c(-0.0125, 0.0125)
lat <- kanaiwa[2] + c(-0.00833, 0.00833)
bb <- st_bbox(c(xmin = lng[1], xmax = lng[2],
ymin = lat[1], ymax = lat[2]), crs = 4326) # WGS84
# to sf
tunami_evac_sf <- st_as_sf(tunami_evac,
coords = c("経度", "緯度"),
crs = 4326) # WGS84津波浸水深をポリゴンで、指定緊急避難場所をシンボルで表示します。
tmap_mode("maplibre")
tm_shape(tunami_data, bbox = bb) +
tm_maplibre(pitch = 60) +
tm_polygons(fill = "Level", fill.scale = tm_scale_ordinal()) +
tm_shape(tunami_evac_sf) +
tm_symbols(fill = "blue")tmap_save関数では、見たままで保存ができなかったので、スクリーンショットを貼りました。
