Rを用いてラスターデータを結合する

# はじめに
今回はラスターデータの結合を行います。
前回作成したマップでは神奈川県の西方が切れていました。理由はASTER GDEMからダウンロードする際のエリアが異っていたためです。
前回から追加したコードは１）ラスターデータを結合する、２）神奈川県のshpファイルをもとにマスクするの２点です。

**【前回記事】**

https://qiita.com/m37335/items/313318a9a936ec9062be

# コード全体像
```r
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") 

```
## 完成版
![kanagawa_baseMap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/68530f45-c273-46ab-483b-02762124fc41.png)

# STEP1 必要なパッケージ
事前にRに以下のパッケージをインストールします。
terraパッケージはラスターデータとベクトルデータを用いた空間データ解析のためのパッケージです。今回扱ったラスターデータの結合の他にもリモートセンシングの分析も行うことができます。

```r
install.packages("terra")
```

# STEP2 ラスターデータの結合
ラスターデータの結合にあたっては以下のサイトを参考にしました。

https://gis.stackexchange.com/questions/407623/merging-raster-in-r

同一フォルダ内にあるTiffファイルのリストを作成し、結合することができます。
今回は２つのTiffファイルでしたが、複数のファイルを結合することができます。

```r
# 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)
```
## 結合したラスターデータ
```r
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
![Rplot01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/4112eda0-0020-0e7d-bed5-f83270e347ac.png)
ASTGTMV003_N35E138_dem.tif
![Rplot02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/de759eea-46e9-3c37-b188-630646cc0d64.png)

**結合したデータ**
![kantoAndFuji.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/4d110a5f-4d9f-f1d6-7360-0b3bee5f5e97.png)

## STEP3 マスクの設定
```r
## crop
kanagawa_crop <- crop(kanagawa, extent(kanagawa_sf))
kanagawa_all <- mask(kanagawa_crop, kanagawa_sf)
crs(kanagawa_all)
```

`crop()`は特定の領域に画像を切り取るために用います。今回は神奈川県が含まれる緯度経度でクロップしています。
また、`mask()`は特定の形状のみ表示します。今回は作成したshpファイルから表示する形状を設定しました。

その上で地図を作成しました。