使用terra包保存ASC文件报错:无法在ASCII Grid文件中找到数据值
问题
可复现代码
library(terra) ext1_boreal <- ext(-154.529, -104.855, 47.663, 70.4789) x <- rast(ext1_boreal, res=.1, crs="epsg:4326") values(x) <- 1:ncell(x) ext_EcoZone1 <- ext(-140.999, -122.812, 56.408, 64.700) EcoZone2 <- vect(ext_EcoZone1, crs="epsg:4326") x <- mask(x, EcoZone2) f <- "D:/GitHub/MyProject/Outputs/Rasters/Explanatory/Testx.asc" writeRaster(x, filename=f, overwrite=TRUE)
报错信息
Warning: D:/GitHub/MyProject/Outputs/Rasters/Explanatory/Testx.asc: Couldn't find data values in ASCII Grid file. (GDAL error 1)Error: [rast] cannot open this file as a SpatRaster: D:/GitHub/MyProject/Outputs/Rasters/Explanatory/Testx.asc
环境与现象
- terra版本:1.7-71
- R版本:4.3.3
- 现象:可正常导出TIFF格式,导出ASC格式失败;通过QGIS将TIFF转为ASC后可正常导入R。
原因分析
- ASCII Grid格式规范与GDAL驱动处理差异:ASCII Grid是纯文本栅格格式,要求必须明确标记
NODATA_value识别无效值。用mask处理后栅格存在大量NA值,当前版本的terra调用GDAL写入ASC时,可能未正确将NA映射为符合规范的NoData值,或写入的数据块结构不符合GDAL读取ASC的校验逻辑,导致读取时被判定为“找不到数据值”。 - terra版本特定bug:你使用的terra 1.7-71可能在处理带大量NoData的栅格导出ASC时存在兼容性问题,与GDAL的交互逻辑有疏漏。而QGIS调用的GDAL驱动在转换TIFF到ASC时,会严格遵循格式规范,正确添加NoData标记并组织数据结构,因此生成的ASC文件可正常被R识别。
- 路径/权限因素可排除:同一路径下能正常导出TIFF,说明路径有效且有写入权限,无需考虑该因素。
内容的提问来源于stack exchange,提问作者Mark Thompson
相关产品推荐
相关产品推荐

