避難場所の位置をRで確認してみよう

伊東宏樹

2025-11-15

自己紹介

この発表の内容

Rをつかって
指定緊急避難場所」の
位置を
地図上に表示する

指定緊急避難場所とは

  • 指定緊急避難場所: 災害の危険から命を守るために緊急的に避難する場所

    • 土砂災害、洪水、津波、地震等の災害種別ごとに指定が行われる
    • 似ているけど違う
      • 指定避難所: 災害が発生した場合に避難をしてきた被災者が一定期間生活するための施設

(内閣府: 「指定緊急避難場所」と「指定避難所」の違いについて

データ

金沢市とその周辺の指定緊急避難場所のデータ

データ読み込み

readrパッケージのread_csv関数を使ってCSVファイルを読み込む

> data_dir <- "data"
> data_file <- "ishikawa-central-evacuation-space.csv"
> evac_data <- readr::read_csv(file.path(data_dir, data_file))

データ確認

> evac_data
# A tibble: 643 × 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>     
# ℹ 633 more rows
# ℹ 34 more variables: 所在地_全国地方公共団体コード <dbl>, 町字ID <chr>,
#   所在地_連結表記 <chr>, 所在地_都道府県 <chr>, 所在地_市区町村 <chr>,
#   所在地_町字 <chr>, 所在地_番地以下 <chr>, `建物名等(方書)` <chr>,
#   緯度 <dbl>, 経度 <dbl>, 標高 <chr>, 電話番号 <chr>, 内線番号 <lgl>,
#   連絡先メールアドレス <chr>, 連絡先FormURL <lgl>,
#   `連絡先備考(その他、SNSなど)` <lgl>, 郵便番号 <chr>, …

列の確認

> 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] "画像_ライセンス"                   "備考"                             

名称と、経度・緯度を表示

> evac_data |>
+   dplyr::select(`名称`, `経度`, `緯度`)
# A tibble: 643 × 3
   名称                              経度  緯度
   <chr>                            <dbl> <dbl>
 1 三谷公民館(指定避難場所)        137.  36.6
 2 三谷小学校(指定避難場所)        137.  36.6
 3 薬師谷公民館(指定避難場所)      137.  36.6
 4 不動寺小学校(指定避難場所)      137.  36.6
 5 柳瀬川つつみ公園(指定避難場所)  137.  36.6
 6 湖陽児童公園(指定避難場所)      137.  36.6
 7 湖陽緑道公園(指定避難場所)      137.  36.6
 8 北部公園(指定避難場所)          137.  36.6
 9 金沢競馬場(指定避難場所)        137.  36.6
10 金沢向陽高等学校(指定避難場所)  137.  36.6
# ℹ 633 more rows

地図表示

  • 方法はいろいろありますが

  • 今回はLeafletを使用して地図表示

Leaflet

  • インタラクティブな地図を作成できる Javascriptのライブラリ

  • Rからはleafletパッケージを使用

> install.packages("leaflet")
> library(leaflet)

表示例

  • addTiles関数で、地図タイルを追加(デフォルトではOpenStreetMap)
  • パイプ演算子(|>または%>%)で、レイヤーを重ねていくイメージ
> 
> leaflet() |>
+   addTiles()

表示例

金沢駅付近を表示

setView関数で、経度、緯度、ズームレベルを指定

> # 金沢駅の位置
> lat <- 36.578044
> lng <- 136.648175
> 
> leaflet() |>
+   addTiles() |>
+   setView(lng = lng, lat = lat, zoom = 15)

金沢駅付近を表示

避難場所のマーカーを追加

  • addMarkers関数でマーカーを追加
    • data引数に、指定緊急避難場所のデータevac_dataを指定
    • lng引数にevac_data経度列を指定(チルダ(~)に注意)
    • lat引数に緯度列を指定(チルダ(~)に注意)
> leaflet() |>
+   addTiles() |>
+   setView(lng = lng, lat = lat, zoom = 15) |>
+   addMarkers(data = evac_data,
+              lng = ~`経度`, lat = ~`緯度`)

避難場所のマーカーを追加

マーカーに説明を追加

popup引数に、~`名称`を指定します

念のためhtmltools::htmlEscape 関数を通しています

> leaflet() |>
+   addTiles() |>
+   setView(lng = lng, lat = lat, zoom = 15) |>
+   addMarkers(data = evac_data,
+              lng = ~`経度`, lat = ~`緯度`,
+              popup = ~`名称` |> htmltools::htmlEscape())

マーカーに説明を追加

マーカーに説明を追加(2)

label引数に、~`名称`を指定(htmltools::htmlEscape 関数は不要)

> leaflet() |>
+   addTiles() |>
+   setView(lng = lng, lat = lat, zoom = 15) |>
+   addMarkers(data = evac_data,
+              lng = ~`経度`, lat = ~`緯度`,
+              label = ~`名称`)

マーカーに説明を追加(2)

津波浸水想定データと津波の指定緊急避難場所を重ねる

> tunami_file <- "A40-17_17.geojson"
> tunami_data <- sf::st_read(file.path(data_dir, tunami_file)) |>
+   sf::st_transform(crs = 4326)
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

津波浸水想定データ

データ確認

> 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_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に表示

金沢市金石地区付近を表示

> pal <- colorFactor("viridis", tunami_data$Level, ordered = TRUE,
+                    reverse = TRUE)
> leaflet(tunami_data) |>
+   addTiles() |>
+   setView(lng = 136.593827, lat = 36.601285, zoom = 15) |>
+   addPolygons(stroke = FALSE,
+               fillColor = ~pal(Level),
+               fillOpacity = 0.9) |>
+   addLegend(pal = pal, values = ~Level, title = "津波浸水深")

leafletに表示

津波の指定緊急避難場所を抽出

  • 津波の指定緊急避難場所をマーカーとして表示したい

  • まずは、津波の指定緊急避難場所を抽出

> tunami_evac <- evac_data |>
+   dplyr::filter(`災害種別_津波` == 1)

地図に津波避難場所をマーカーとして追加

> leaflet(tunami_data) |>
+   addTiles() |>
+   setView(lng = 136.593827, lat = 36.601285, zoom = 15) |>
+   addPolygons(stroke = FALSE,
+               fillColor = ~pal(Level),
+               fillOpacity = 0.9) |>
+   addLegend(pal = pal, values = ~Level, title = "津波浸水深") |>
+   addMarkers(data = tunami_evac,
+              lng = ~`経度`, lat = ~`緯度`,
+              label = ~`名称`)

地図に津波避難場所をマーカーとして追加

まとめ

  • leafletパッケージを使用して、Rでインタラクティブな地図を作成できる

  • 指定緊急避難場所のオープンデータを利用して、その位置をマーカーとして地図上で表示できる

  • 津波浸水想定データを利用して、浸水想定区域を地図上に表示し、津波の指定緊急避難場所を重ねて表示できる

    • 他の災害(洪水・高潮等)でも、災害の想定区域がデータとして公開されているものは同様に表示できる