raster::writeRaster分层保存栅格堆栈/块时图层顺序是否与名称一致?
对应关系说明
你写的这段导出代码默认就是严格按图层名一一匹配导出的,不会错位:
- 当
bylayer = TRUE时,writeRaster会从第一层到最后一层,按RasterBrick内部的图层排列顺序逐个写出栅格 - 你传入的
filename = names(b)参数,会自动按顺序给第i个输出文件命名为names(b)[i],也就是第一层对应bio1.tif、第二层对应bio2.tif,一直到第19层对应bio19.tif,和原brick里对应名称的图层内容完全一致。
1分钟验证方法
如果还是存疑,不用全量核对19个图层,抽1-2个层做数值校验就行:
- 先把导出的任意目标tif读回R环境,比如校验bio1层:
# 用terra包的写法 library(terra) bio1_check <- rast("bio1.tif") # 如果用旧版raster包就换这个写法 # library(raster) # bio1_check <- raster("bio1.tif") - 和原brick里的同名图层做逐像元差值计算,看差值范围:
# terra包写法 diff_res <- values(b[["bio1"]]) - values(bio1_check) # raster包写法 # diff_res <- getValues(b[["bio1"]]) - getValues(bio1_check) range(diff_res, na.rm = TRUE) - 如果最终输出结果是
0 0,就证明两个栅格的所有非空像元值完全一致,没有错位、没有值偏差。
可能出现匹配错误的场景(你当前代码没涉及)
只有两种情况会出现导出文件和原图层不对应:
- 你手动修改了
names(b)的字符顺序,但没有同步调整RasterBrick内部的图层排列顺序 - 传入
filename参数的文件名向量顺序,和names(b)的顺序不一致
你当前代码直接用names(b)作为文件名输入,不存在顺序错配的问题,可以放心用。
内容的提问来源于stack exchange,提问作者zhixue chen
相关产品推荐
相关产品推荐

