如何调整Raster栅格尺寸使其行列维度匹配自身Extent范围
问题原因
你之前的代码运行后全为NA,核心原因是新建的目标栅格未显式指定和原栅格一致的空间范围,raster()函数默认创建的是全球经纬度范围的栅格,和你的自定义范围完全不重叠,重采样自然无法匹配到有效数值。
最优解决方案:使用disaggregate函数
你的需求是将原栅格的每个像素拆分为多个同值的子像素,直接用raster包内置的disaggregate函数即可实现,不需要手动重采样,逻辑更简洁,结果也不会出错:
library(raster) # 读取原栅格 ref <- raster("你的本地栅格文件路径") # fact=4表示在行列两个方向都将单个像素拆分为4份,刚好匹配你的分辨率从4变为1的需求 target_raster <- disaggregate(ref, fact = 4)
运行后得到的target_raster维度自动为2000行×1400列,范围和原栅格完全一致,原单个像素对应的16个新像素(4×4)值完全和原像素保持一致,符合你的需求。
如果你坚持用resample方法的修正版
如果需要手动创建目标栅格再重采样,必须显式指定目标栅格的范围、投影,同时采用邻近插值法避免分类值出现异常:
library(raster) ref <- raster("你的本地栅格文件路径") ref_ext <- extent(ref) # 创建目标栅格时指定和原栅格一致的范围、投影 a <- raster(ext = ref_ext, nrow = ymax(ref_ext), ncol = xmax(ref_ext), crs = crs(ref)) # 采用邻近插值法,适配只有1和NA的分类值场景 target_raster <- resample(ref, a, method = "ngb")
结果验证
可以通过以下代码确认结果符合预期:
# 查看原栅格第1行第1列的值 ref[1,1] # 查看目标栅格对应位置的4×4区域值,所有值应和原像素值一致 target_raster[1:4,1:4] # 查看目标栅格维度,应为2000行、1400列 dim(target_raster)
内容的提问来源于stack exchange,提问作者GeorgeDros
相关产品推荐
相关产品推荐

