はじめに
今回はラスターデータの結合を行います。
前回作成したマップでは神奈川県の西方が切れていました。理由はASTER GDEMからダウンロードする際のエリアが異っていたためです。
前回から追加したコードは1)ラスターデータを結合する、2)神奈川県のshpファイルをもとにマスクするの2点です。
【前回記事】
コード全体像
library(rayshader)
library(raster)
library(sf)
library(ggplot2)
# Combine RasterFile
library(terra)
# Package for colorpallet
library(viridis)
library(cptcity)
library(dplyr)
#--------------------------
# DRAFT: COMBINE RASTER FILE
#--------------------------
# Merging raster in R
# https://gis.stackexchange.com/questions/407623/merging-raster-in-r
# 同一フォルダ内にあるTifファイルのリストを作成
img <- list.files("./0003_DEM/", "tif$", full.names=TRUE) # the $ exludes aux-files
ic <- sprc(lapply(img, rast))
r <- mosaic(ic)
#--------------------------
# DRAFT: IMPORT RASTER FILE
#--------------------------
kanagawa = raster(r)
kanagawa_mat = raster_to_matrix(kanagawa)
st_crs(kanagawa)
kanagawa_small = resize_matrix(kanagawa_mat,0.25)
# Output Map
kanagawa_small %>%
height_shade() %>%
plot_map()
#--------------------------
# DRAFT: IMPORT VECTOR FILE
#--------------------------
## read_sf
kanagawa_sf <- sf::read_sf("./000_map/kanagawa_N03-20220101_14_GML/N03-22_14_220101.shp",
options= c("ENCODING=CP932"),
quiet = FALSE)
## CRSの確認
crs(kanagawa_sf)
## CRSの変換
kanagawa_sf <- st_transform(kanagawa_sf, crs = proj4string(kanagawa))
## crop
kanagawa_crop <- crop(kanagawa, extent(kanagawa_sf))
kanagawa_all <- mask(kanagawa_crop, kanagawa_sf)
crs(kanagawa_all)
## Check that it worked
plot(kanagawa_all)
kanagawa_all
#--------------------------
# DRAFT: OUTPUT MAP
#--------------------------
# ggplotで描画するため、tibble形式に変換
kanagawa_all_dem <-
kanagawa_all %>% # ラスターDEM
as.data.frame( xy = TRUE ) %>% # rasterをデータフレームに変換
tibble::as_tibble() %>% # tipple形式に変換
dplyr::rename("Elevation" = Band.1) # 標高値をElevationにリネーム
kanagawa_only <- dplyr::filter(kanagawa_sf, N03_001 == "神奈川県")
# Map出力
ggplot() +
xlab("longitude") +
ylab("latitude") +
theme_minimal() +
geom_raster(data = kanagawa_all_dem , # 標高ラスタ
aes(x, y, fill = Elevation),
hjust = 0, vjust = 0) +
scale_fill_gradientn(colours = cptcity::cpt(pal = "tp_tpushum" , n = 100), na.value = NA, limits = c(0, 1750)) + # カラーパレットにcptを利用
#scale_fill_continuous(na.value = "transparent") +
#geom_contour(data = kanagawa_all_dem, aes(x, y, z = Elevation), col = "gray70", size = 0.2) + # 等高線描画
geom_sf(data = kanagawa_sf , col = "gray40" , fill = NA, lwd = 0.3) +
scale_colour_viridis(option = "cividis" , discrete =TRUE ) +
guides(fill="none")
完成版
STEP1 必要なパッケージ
事前にRに以下のパッケージをインストールします。
terraパッケージはラスターデータとベクトルデータを用いた空間データ解析のためのパッケージです。今回扱ったラスターデータの結合の他にもリモートセンシングの分析も行うことができます。
install.packages("terra")
STEP2 ラスターデータの結合
ラスターデータの結合にあたっては以下のサイトを参考にしました。
同一フォルダ内にあるTiffファイルのリストを作成し、結合することができます。
今回は2つのTiffファイルでしたが、複数のファイルを結合することができます。
# Merging raster in R
# https://gis.stackexchange.com/questions/407623/merging-raster-in-r
# 同一フォルダ内にあるTifファイルのリストを作成
img <- list.files("./0003_DEM/", "tif$", full.names=TRUE) # the $ exludes aux-files
ic <- sprc(lapply(img, rast))
r <- mosaic(ic)
結合したラスターデータ
kanagawa = raster(r)
kanagawa_mat = raster_to_matrix(kanagawa)
st_crs(kanagawa)
kanagawa_small = resize_matrix(kanagawa_mat,0.25)
# Output Map
kanagawa_small %>%
height_shade() %>%
plot_map()
元データ
ASTGTMV003_N35E138_dem.tif
ASTGTMV003_N35E138_dem.tif
STEP3 マスクの設定
## crop
kanagawa_crop <- crop(kanagawa, extent(kanagawa_sf))
kanagawa_all <- mask(kanagawa_crop, kanagawa_sf)
crs(kanagawa_all)
crop()
は特定の領域に画像を切り取るために用います。今回は神奈川県が含まれる緯度経度でクロップしています。
また、mask()
は特定の形状のみ表示します。今回は作成したshpファイルから表示する形状を設定しました。
その上で地図を作成しました。