Rで、サイズ(範囲)と解像度がそれぞれ異なるラスターを同じ範囲・同じ解像度に揃えたい。ついでに座標系も変えます。
##環境
R ver4.1.0
##準備
範囲も解像度も異なるラスターを用意します。
raster packageを使用します。
ras0.r
library(raster)
#1つ目: R1
R1=raster(nrows=1000, ncols=5000, extent(c(140.0,141.0,35.0,35.5)), crs=CRS("+init=epsg:4612"), vals=rnorm(5000000))
#2つ目: R2
rv2=rep(c(rep(1,200),rep(0,200),rep(2,200),rep(0,200),rep(2,200),rep(0,200),rep(1,200),rep(2,200),rep(1,200),rep(0,200)),1200)
R2=raster(nrows=1200, ncols=2000, extent(c(140.1,140.9,34.98,35.45)), crs=CRS("+init=epsg:4612"), vals=rv2)
#描画してみる
plot(R1)
plot(R2, add=T)
こんな感じに揃っていない2つのラスター(ちょっと適当に描画)
##0. 座標系を変更する
座標系を変えなくていいなら、ここはやらなくていいです。
ras1.r
#測地座標系JGD2000(epsg:4612)からUTM座標系(3100)に変えます
#R1は連続値なのでbilinear、R2は整数値なのでngbを使いました
R1_3100=projectRaster(R1, crs=CRS("+init=epsg:3100"), method='bilinear')
R2_3100=projectRaster(R2, crs=CRS("+init=epsg:3100"), method='ngb')
#描画してみる
plot(R1_3100)
plot(R2_3100, add=T)
##1. 切り抜く範囲と解像度の設定
最終的に欲しい範囲と解像度を持ったラスターを作成する。
ras2.r
#切り抜きたい範囲の座標をe1で指定
e1=extent(c(420000, 480000, 3880000, 3920000))
#範囲がe1で、80行x120列(セルサイズは500)の解像度になるラスターを作る(値は入っていない)
#出来上がりはこのラスターのサイズ・解像度になります
R0=raster(nrows=80, ncols=120, e1, crs=CRS("+init=epsg:3100"), vals=NULL)
#この黒い線で囲んだ四角です
plot(R1_3100)
plot(R2_3100, add=T)
plot(e1, add=T)
##2. ラスターの範囲と解像度を揃える
crop
ではなくてresample
使います。
ras3.r
#各ラスターをR0に合わせる感じです。
R1_crop=resample(R1_3100, R0, method ='bilinear')
R2_crop=resample(R2_3100, R0, method ='ngb')
##3. 整えたラスターたちをまとめる
ras4.r
R_stack=stack(R1_crop, R2_crop)
names(R_stack)<-c("R1", "R2") #レイヤーの名前を変える
#出来上がり
plot(R_stack)
> R_stack
class : RasterStack
dimensions : 80, 120, 9600, 2 (nrow, ncol, ncell, nlayers)
resolution : 500, 500 (x, y)
extent : 420000, 480000, 3880000, 3920000 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
names : R1, R2
min values : -0.1953975, 0.0000000
max values : 0.2295911, 2.0000000