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

写入带DBF的分类栅格时缺失像素计数及ArcGIS属性表问题

解决分类栅格属性表缺失像素计数的问题

你当前的代码仅将矢量的属性信息写入了DBF,但未统计栅格化后每个类别的像素数量,导致GIS软件无法识别完整的属性表。以下是修正后的代码及关键步骤:

修正代码

library(terra)
library(foreign)

# 加载矢量和栅格数据
f <- system.file("ex/lux.shp", package="terra")
v <- vect(f)
r <- rast(system.file("ex/elev.tif", package="terra"))

# 栅格化矢量,基于NAME_2字段生成分类栅格
y <- rasterize(v, r, "NAME_2")

# 1. 统计每个分类的像素数量
freq_table <- freq(y)
# 2. 获取原矢量属性表
attr_table <- levels(y)[[1]]
# 3. 合并属性表与像素计数(按ID匹配)
attr_table_with_count <- merge(attr_table, freq_table, by = "ID", all.x = TRUE)
# 补全无像素的分类计数为0
attr_table_with_count$count[is.na(attr_table_with_count$count)] <- 0
# 重命名字段以适配ArcGIS规范(ArcGIS默认识别Count字段)
colnames(attr_table_with_count)[colnames(attr_table_with_count) == "count"] <- "Count"

# 写入分类栅格,指定整数类型确保GIS识别
writeRaster(y, filename="Categorical_raster.tif", overwrite=TRUE, datatype="INT1U")
# 写入带像素计数的属性表DBF
write.dbf(attr_table_with_count, file = "Categorical_raster.tif.vat.dbf")

关键说明

  • freq(y):统计栅格中每个分类ID对应的像素数量,这是属性表缺失的核心数据。
  • 合并表时使用all.x = TRUE:确保所有矢量中的分类都被保留,即使该分类在栅格中没有像素(计数设为0)。
  • 指定datatype="INT1U":将栅格保存为无符号整数类型,符合分类栅格的存储规范,帮助GIS软件正确识别属性表关联。
  • 字段重命名为Count:适配ArcGIS的属性表默认字段名规则,避免ArcGIS无法识别计数字段。

内容的提问来源于stack exchange,提问作者UseR10085

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:16:03