R과 leaflet으로 국토 수치 정보의 평년 값 메쉬를 시각화
사용한 라이브러리
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)
참고
Reference
이 문제에 관하여(R과 leaflet으로 국토 수치 정보의 평년 값 메쉬를 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nozma/items/b89d9471ea804e9ea9d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)