R과 leaflet으로 국토 수치 정보의 평년 값 메쉬를 시각화

18283 단어 GISRleaflet

사용한 라이브러리



leaflet 외에도 Shapefile을 읽고 편집하기 위해 dplyr, xml2, sf의 3 패키지를 사용했습니다.

입력
library(leaflet)
library(dplyr)
library(xml2)
library(sf)

Shapefile 로드 및 간편한 편집



연평균 기상 요소를 포함하는 파일은 국토 수치 정보 다운로드 서비스의 "2.
제작 구역 > 재해·방재 >
「평년치(기후) 메쉬」로부터 다운로드할 수 있다. 다음의 예에서는, 다운로드한 zip을 전개하고 있는 것으로 한다.

먼저 Shapefile을로드합니다. 폴더까지의 지정으로 좋다.

입력
## シェープファイル読み込み
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 파일로부터 속성명을 추출해 이것을 설정한다.

입력
## 列名の抽出と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 오브젝트가 완성된다.

입력
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의 값으로 변환해 둔다.

입력
m <- m %>%
  mutate_if(grepl(pattern = "(降水量|気温|日照時間|全天日射量)", names(.)), function(x) x*.1)

입력
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= 에 데이터를 문자열로 주면 마우스 오버 시에 표시될 수 있다.

입력
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)



참고


  • leaflet으로 시작하는 R에 의한 지도 플롯
  • 좋은 웹페이지 즐겨찾기