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

栅格TIF重分类后出现浮点值,如何获取唯一整数值栅格?

栅格重分类后出现浮点值的问题解决

问题背景

现有栅格TIF文件,唯一值为 0,2,4,5,9,111,114,115,116,124,125,126,需要重分类为 0,2,4,5,9,4,4,4,4,4,4,4,使用以下代码后,重分类结果仍存在浮点值,无法得到仅含目标整数的栅格:

is<-c(0,2,4,5,9,111,114,115,116,124,125,126)
become<-c(0,2,4,5,9,4,4,4,4,4,4,4)
recMat<-matrix(c(is,become),ncol=2,nrow=12)
LU_AOI_2 <- reclassify(LU_AOI, recMat)# Reclassify

问题原因

  1. 数据类型继承:reclassify(raster包)默认会继承输入栅格的数据类型。如果原始栅格是浮点型(如Float32/Float64),即使重分类赋值为整数,结果仍会以浮点格式存储(表现为4.0而非4)。
  2. 你的重分类矩阵逻辑本身是正确的,核心问题出在数据类型的保留上。

解决方法

方法1:强制转换为整数类型

重分类完成后,直接将栅格数据类型转为整数:

# 重分类后强制转换
LU_AOI_2 <- as.integer(LU_AOI_2)

# 验证唯一值
unique(LU_AOI_2[])

方法2:用match直接替换(更直观)

跳过reclassify,用match函数直接匹配替换值,同时指定整数类型:

library(raster)

# 定义映射关系
is_vals <- c(0,2,4,5,9,111,114,115,116,124,125,126)
become_vals <- c(0,2,4,5,9,4,4,4,4,4,4,4)

# 直接替换值并转换为整数
LU_AOI_2 <- LU_AOI
LU_AOI_2[] <- become_vals[match(LU_AOI[], is_vals)]
LU_AOI_2 <- as.integer(LU_AOI_2)

方法3:保存时指定整数类型

如果需要保存到本地,可在writeRaster中直接指定整数数据类型:

writeRaster(LU_AOI_2, "reclassified_raster.tif", datatype="INT2S", overwrite=TRUE)

INT2S代表带符号16位整数,可根据需求选择合适的整数类型(如INT1U无符号8位整数)。

验证结果

执行上述操作后,再次查看唯一值:

unique(LU_AOI_2[])

结果应仅包含目标整数:0,2,4,5,9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:47:25