R中stack栅格函数无法识别NoData值的问题咨询
解决R语言raster包堆叠栅格后NoData计入数值范围的问题
你碰到的问题本质是raster包默认会把NoData值算进栅格的数值统计里,虽然QGIS能正确识别NoData,但R导出TIFF时没更新正确的统计信息。可以按下面的方法处理:
确认并设置NoData值
读取栅格后先检查NoData是否被正确识别,要是没自动识别就手动设置:temp_10m <- raster("temp_10m.tif") # 查看当前NoData设置 print(temp_10m@file@nodatavalue) # 若未正确识别,手动指定NoData值 temp_10m <- setNA(temp_10m, value = -3.4e+38)重新计算并更新栅格统计(忽略NoData)
用cellStats计算排除NoData后的真实极值,再更新栅格的统计属性:# 计算忽略NoData的最小、最大值 real_min <- cellStats(temp_10m, stat = "min", na.rm = TRUE) real_max <- cellStats(temp_10m, stat = "max", na.rm = TRUE) # 更新栅格的统计属性 temp_10m@data@min <- real_min temp_10m@data@max <- real_max堆叠并导出TIFF
完成上述设置后再堆叠、导出,导出时加上options参数确保统计信息写入TIFF文件:stack_obj <- stack(temp_10m) save(stack_obj, file = "temp_test.Rdata") writeRaster(stack_obj, filename = names(stack_obj), bylayer = TRUE, format = "GTiff", overwrite = TRUE, options = c("COMPRESS=LZW", "TFW=YES"))
另外,如果你的数据都是非负值,导出时可以指定datatype参数(比如datatype="FLT4S"),进一步避免NoData值干扰数值范围的统计。
内容的提问来源于stack exchange,提问作者Orla Osborne
相关产品推荐
相关产品推荐

