Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

使用したライブラリ

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

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away