R中的栅格计算后如何保持相同的分辨率和坐标参考

问题描述

#####first import all files in a single folder as a list #####
rastlist <- list.files(path = ".",pattern='.tif$',all.files=TRUE,full.names=FALSE)

######load them in a stack  ######
allrasters <- stack(rastlist)
input_stack1 <- stack(brick(allrasters)) 

####### create array #######
try <- array(input_stack1,dim=c(13056,4846,2,1))

####### replace -3000 with NA #######
try[try==-3000]<-NA
input_array<-aperm(try,c(2,1,3,4))

####### convert back #######
output_stack1<-stack(brick(array(input_array,c(4846,13056,2))))

>input_stack1 
class      : RasterStack 
dimensions : 4846,63269376,2  (nrow,ncol,ncell,nlayers)
**resolution : 250,250  (x,y)**
extent     : -1253475,2010525,2211480,3422980  (xmin,xmax,ymin,ymax)
**crs        : +proj=utm +zone=51 +datum=wgs84 +units=m +no_defs** 
names      : MOSAIC_TMP_2019001.hdfout.250m_16_days_NDVI,MOSAIC_TMP_2019017.hdfout.250m_16_days_NDVI 
min values :                                       -3000,-3000 
max values :                                        9996,9996 

>output_stack1
class      : RasterStack 
dimensions : 4846,nlayers)
**resolution : 7.659314e-05,0.0002063558  (x,y)**
extent     : 0,1  (xmin,ymax)
**crs        : NA** 
names      : layer.1,layer.2 
min values :   -2000,-2000 
max values :    9996,9996 

不知道为什么 output_stack1 中的分辨率和 crs 会发生变化。大家能告诉我如何在output_stack1中将-3000替换为NA后,如何保持input_stack1中的分辨率和crs

解决方法

我不知道你为什么要做你正在做的事情,但它表明你可能需要查看raster包的手册或研究材料here

使用文件名列表创建 RasterStack

library(raster)
f <- system.file("external/rlogo.grd",package="raster")
rastlist <- rep(f,3)

s <- stack(rastlist)

(不要在此之后调用 stack(brick());这没有任何用处,但可能需要很多时间。)

现在重新分类 RasterStack。在这个例子中使用 255 而不是 -3000。

r <- reclassify(s,cbind(255,NA))
r 
#class      : RasterBrick 
#dimensions : 77,101,7777,9  (nrow,ncol,ncell,nlayers)
#resolution : 1,1  (x,y)
#extent     : 0,77  (xmin,xmax,ymin,ymax)
#crs        : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
#source     : memory
#names      : red.1,green.1,blue.1,red.2,green.2,blue.2,red.3,green.3,blue.3 
#min values :     0,0 
#max values :   254,254,254