使用terra包堆叠栅格时栅格名与文件名不符的解决方法咨询
terra栅格栈文件名截断问题解决方法
问题说明
从文件夹读取唯一栅格文件列表,用terra包构建栅格栈并提取矢量点的栅格值时:
- 不含下划线的文件名(如
canflax2017.tif)会被自动截断为canflax,导致名称重复 - 含下划线的文件名(如
canflax2018_137.tif)则能完整保留名称 - 提取值时,重复名称的列会被命名为
canflax、canflax.1等,无法保留原始完整文件名信息
解决步骤
核心是手动提取完整文件名并赋值给栅格栈的图层名称,替代terra的自动命名逻辑:
- 读取文件路径时,同步提取不带路径和后缀的纯文件名
- 构建栅格栈后,将纯文件名赋值给栅格栈的
names属性 - 执行提取操作,确保列名与原始完整文件名一致
修改后代码
library(terra) library(tools) # 用于处理文件名 # 读取栅格文件的完整路径列表 rastsfilelist <- list.files(path="XXX/AllRasters", pattern="tif$", full.names = TRUE) # 提取纯文件名(去掉路径和.tif后缀) rast_names <- file_path_sans_ext(basename(rastsfilelist)) # 构建栅格栈并手动设置图层名称 owl_stack <- rast(rastsfilelist) names(owl_stack) <- rast_names # 读取矢量点数据并提取栅格值 owllocs <- vect('XX/shapefiletest.shp') test <- extract(owl_stack, owllocs)
代码说明
basename(rastsfilelist):从完整路径中剥离出文件名(如XXX/AllRasters/canflax2017.tif→canflax2017.tif)file_path_sans_ext():移除文件名的后缀,得到纯名称(如canflax2017.tif→canflax2017)- 手动设置
names(owl_stack)后,栅格栈的每个图层都会保留原始完整文件名,提取后的列名也会与之一致,避免重复截断问题
内容的提问来源于stack exchange,提问作者Ryan Fisher
相关产品推荐
相关产品推荐

