如何将指定属性的RasterLayer栅格转换为x、y方向分辨率均为0.008333333的栅格?
嘿,这个问题我之前也碰到过!核心原因是disaggregate函数的fact参数必须是正整数——它的作用是定义每个原始栅格像元在x、y方向上要拆分成多少个小像元。你看,你计算的拆分因子:
- x方向:
0.12 / 0.008333333 ≈ 14.4 - y方向:
0.034 / 0.008333333 ≈ 4.08
这俩都不是整数,disaggregate只能自动取整或者调整比例来适配,结果就和你想要的分辨率对不上了。
下面给你两种靠谱的解决办法,都能精确得到0.008333333的分辨率:
方法1:用projectRaster直接指定目标分辨率
projectRaster不光能做投影转换,在同一投影下调整分辨率也特别好用,而且支持直接设置目标分辨率,不需要整数倍数的限制:
library(raster) tar_res <- 0.008333333 # 先创建一个符合要求的目标栅格模板 target_template <- raster( ext = extent(my_raster), # 沿用原栅格的范围 crs = crs(my_raster), # 沿用原栅格的坐标系 resolution = tar_res # 设置目标分辨率 ) # 执行重采样,默认用双线性插值,需要的话可以用method="ngb"改成最近邻 final_raster <- projectRaster(my_raster, target_template)
方法2:用resample函数配合模板栅格
思路和上面类似,先手动创建一个完全符合要求的空栅格,再把原栅格重采样过去:
library(raster) tar_res <- 0.008333333 # 手动定义目标栅格的范围、坐标系和分辨率 target_template <- raster( xmn = -180, xmx = 180, ymn = -40.034, ymx = 62, crs = "+proj=longlat +datum=WGS84 +no_defs", resolution = tar_res ) # 重采样,根据你的数据类型选插值方法:连续型数据用"bilinear",分类数据用"ngb" final_raster <- resample(my_raster, target_template, method = "bilinear")
处理完之后,你可以用res(final_raster)检查分辨率,用extent(final_raster)确认范围是否符合预期。如果原范围的边界没法被目标分辨率整除,模板栅格会自动微调边界来适配,你也可以手动调整xmn/xmx/ymn/ymx的值来对齐边界哦。
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

