栅格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
问题原因
- 数据类型继承:
reclassify(raster包)默认会继承输入栅格的数据类型。如果原始栅格是浮点型(如Float32/Float64),即使重分类赋值为整数,结果仍会以浮点格式存储(表现为4.0而非4)。 - 你的重分类矩阵逻辑本身是正确的,核心问题出在数据类型的保留上。
解决方法
方法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
相关产品推荐
相关产品推荐

