【R】数値標高データの表示
2020年7月12日
国土地理院の基盤地図情報ダウンロードサービスで「数値標高モデル」をデータとしてダウンロードできます。僕は、トレランや山登りを楽しんでいるので標高付きの地図データというのが大好きです。これをRを使って表現したいと思っていました。
こちらのサイトを参考にR
にて表示してみます。
陣馬山の地図を表示させたいと思います。メッシュコードは、533931です。データは、FG-GML-5339-31-83-DEM5A-20161001.xmlで、5mのメッシュのデータです。
まず、データを読み込みます。
library(tidyverse) library(xml2) library(jpmesh) library(sf) library(raster) tgt_file <- "FG-GML-5339-31-83-DEM5A-20161001.xml" x <- read_xml(tgt_file)
緯度、経度を確認し、メッシュの情報を取り出します。
xy_lc <- x %>% xml_find_all("/*/*/*/gml:boundedBy/gml:Envelope/gml:lowerCorner") %>% xml_contents() %>% as.character() %>% strsplit(" ") %>% unlist() %>% map_dbl(as.numeric) mesh <- jpmesh::coords_to_mesh(xy_lc[2], xy_lc[1])
地表面のデータを取り出します。
df_dem <- x %>% xml_find_first("/*/*/*/gml:rangeSet/gml:DataBlock/gml:tupleList") %>% xml_contents() %>% as.character() %>% readr::read_delim(delim = ",", col_names = c("type", "value"))
ラスターデータを作りリストに格納します。
raster_dem <- df_dem$value %>% matrix(nrow = 225, ncol = 150) %>% t() %>% raster() mesh <- jpmesh::export_mesh(mesh) bb <- mesh %>% st_bbox() %>% as.numeric() extent(raster_dem) <- extent(bb[1], bb[3], bb[2], bb[4]) crs(raster_dem) <- sp::proj4string(as_Spatial(mesh))
プロットしてみます。
plot(raster_dem) plot(rasterToContour(raster_dem), add = TRUE) title(main = "数値標高モデル (5mメッシュ): 5339-31-83", sub = "データ:国土地理院 基盤地図情報数値標高モデル")
地図の表示ができました。陣馬山っぽいですね。
OpenStreetMapに重ねてみます。
mapview::mapview(raster_dem, alpha.regions = 0.2)