You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:05:58