保存stars对象为TIF时如何保留因子水平?能否创建栅格属性表?
解决stars栅格保存为TIF时因子水平丢失的问题
stars的write_stars默认仅存储因子的整数编码,不会自动写入栅格属性表(RAT)。要保留因子水平,需手动构建RAT并通过GDAL工具关联到输出文件,具体步骤如下:
- 准备因子型stars对象
library(stars) library(gdalUtils) # 用于调用GDAL工具操作栅格属性表 # 创建示例因子栅格 m <- matrix(letters[1:9], nrow = 3, ncol = 3) dim(m) <- c(x = 3, y = 3) s <- st_as_stars(m) s[["A1"]] <- factor(s[["A1"]])
- 导出整数栅格文件
先写出仅含整数编码的TIF:
write_stars(s, "reprex.tif")
- 构建栅格属性表(RAT)
提取因子的整数编码与对应标签,生成符合GDAL要求的属性表:
rat_df <- data.frame( ID = seq_along(levels(s[["A1"]])), # 对应栅格的整数值 Class = levels(s[["A1"]]) # 因子水平标签 )
- 将RAT写入TIF文件
通过GDAL工具将属性表关联到已导出的TIF:
# 将RAT保存为临时CSV(GDAL支持从CSV读取RAT) temp_rat <- tempfile(fileext = ".csv") write.csv(rat_df, temp_rat, row.names = FALSE) # 调用gdal_edit添加RAT gdal_edit("reprex.tif", rat = temp_rat)
- 验证效果
重新读取文件或在QGIS中打开,即可看到带因子水平的图例:
s_loaded <- read_stars("reprex.tif") # 查看已加载的栅格属性表 st_get_metadata(s_loaded, "RAT")
注意事项
- 确保已安装
gdalUtils包,且系统环境配置了GDAL(安装stars/sf时通常会自动配置)。 - CSV格式的RAT需以整数ID列为第一列,后续列可自定义属性名称。
内容的提问来源于stack exchange,提问作者Josep Pueyo
相关产品推荐
相关产品推荐

