使用したライブラリ
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)