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

R语言terra包writeRaster导出asc栅格NODATA值异常解决方法

问题背景

使用R语言处理栅格数据时,分别调用raster、terra包的writeRaster函数导出ESRI ASCII(.asc)格式栅格,测试代码如下:

library(terra)
library(raster)

f <- system.file("external/test.grd", package="raster")
r1 <- raster(f)
plot(r1)
writeRaster(r1, paste('Try1','.asc', sep=''), overwrite=TRUE)

r2 <- rast(f)
writeRaster(r2, paste('Try2','.asc', sep=''), overwrite=TRUE)

运行后对比两个输出文件发现:

  • raster包导出的Try1.asc中,文件头标注的NODATA_value为-3.4e+38,无值像元均存储为该数值,可被各类GIS软件正常识别
  • terra包导出的Try2.asc中,无值标识为nan,该文本格式的无值标记会导致其他软件读取栅格时出现异常,手动在writeRaster中设置NAflag = -3.4e+38参数无法生效。
解决方法

terra包写入asc格式时,默认会将浮点型栅格的NaN/NA值直接输出为nan文本,不会自动替换为NAflag指定的数值,需要在写入时额外补充wopt列表中的nan参数,和NAflag保持一致,同时显式指定对应浮点数据类型,即可输出和raster包规范完全一致的asc文件,修正后的写入代码如下:

writeRaster(
  r2,
  "Try2_fixed.asc",
  overwrite = TRUE,
  NAflag = -3.4e+38,
  datatype = "FLT4S",
  wopt = list(nan = -3.4e+38)
)

导出后可验证:

  • asc文件头的NODATA_value字段正确显示为-3.4e+38
  • 所有无值像元位置均存储为-3.4e+38数值,不存在nan文本
  • 输出文件可被QGIS、ArcGIS等常规GIS软件正常读取,无值区域识别逻辑和raster包输出文件完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:21:46