LoginSignup
12
10

More than 5 years have passed since last update.

Rとleafletで国土数値情報の平年値メッシュを可視化する

Last updated at Posted at 2018-07-28

使用したライブラリ

leafletの他、Shapefileの読み込みと編集のためにdplyr, xml2, sfの3パッケージを使った。

input
library(leaflet)
library(dplyr)
library(xml2)
library(sf)

Shapefileの読み込みと簡単な編集

平年値の気象要素を含むファイルは国土数値情報ダウンロードサービスの「2.
制作区域 > 災害・防災 >
平年値(気候)メッシュ」からダウンロードできる。次に示す例では、ダウンロードしたzipを展開してあるものとする。

まず、Shapefileを読み込む。フォルダまでの指定で良い。

input
## シェープファイル読み込み
m1 <- read_sf("G02-12/G02-12_5237-jgd_GML/")
m2 <- read_sf("G02-12/G02-12_5137-jgd_GML/")
m3 <- read_sf("G02-12/G02-12_5236-jgd_GML/")
m <- rbind(m1, m2, m3)

このままだと属性名がG02_001みたいになっていて辛いので、同梱のxmlファイルから属性名を抽出してこれを設定する。

input
## 列名の抽出とsfオブジェクトへの付与
x <- read_xml("G02-12/G02-12_5137-jgd_GML/G02-12_5137-jgd.xml")
n <- xml_child(xml_child(x, 4), 1) %>% xml_contents() %>% as_list %>% unlist
names(m)[seq_along(n)] <- n

これでこんな感じのsfオブジェクトが完成する。

input
m[1:5, 1:5]
output
Simple feature collection with 5 features and 5 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 137 ymin: 34.66667 xmax: 137.0125 ymax: 34.70833
epsg (SRID):    NA
proj4string:    NA
# A tibble: 5 x 6
  `3次メッシュコード` `1月降水量` `2月降水量` `3月降水量` `4月降水量`
  <chr>                  <dbl>       <dbl>       <dbl>       <dbl>
1 52370000                 566         608        1233        1305
2 52370010                 563         608        1244        1304
3 52370020                 553         607        1243        1298
4 52370030                 550         606        1235        1291
5 52370040                 535         602        1228        1277
# ... with 1 more variable: geometry <POLYGON>

なお、平年値メッシュデータの属性値のうち、降水量、気温、日照時間、全天日射量は、おそらく整数型で格納する都合から0.1単位の値になっている(=値が10倍されている)。そこで、これらは1/10の値に変換しておく。

input
m <- m %>%
  mutate_if(grepl(pattern = "(降水量|気温|日照時間|全天日射量)", names(.)), function(x) x*.1)
input
m[1:5, 1:5]
output
Simple feature collection with 5 features and 5 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 137 ymin: 34.66667 xmax: 137.0125 ymax: 34.70833
epsg (SRID):    NA
proj4string:    NA
# A tibble: 5 x 6
  `3次メッシュコード` `1月降水量` `2月降水量` `3月降水量` `4月降水量`
  <chr>                  <dbl>       <dbl>       <dbl>       <dbl>
1 52370000                56.6        60.8        123.        130.
2 52370010                56.3        60.8        124.        130.
3 52370020                55.3        60.7        124.        130.
4 52370030                55          60.6        124.        129.
5 52370040                53.5        60.2        123.        128.
# ... with 1 more variable: geometry <POLYGON>

地図の描画

leafletを使って地図の上にメッシュデータを描画していく。label=にデータを文字列で与えておくとマウスオーバー時に表示されて良い。

input
target <- "8月最高気温"

## カラーパレット定義
pal <- colorNumeric(palette = "viridis", domain = m[[target]])

leaflet() %>%
  addProviderTiles(providers$CartoDB) %>% 
  addPolygons(
    data = m, 
    color = ~pal(m[[target]]), 
    stroke = FALSE,
    label = as.character(m[[target]])
    ) %>% 
  addLegend(pal = pal, values = m[[target]], title = target)

b117eabf6821247e50079d76542054cc.gif

参考

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10