这指向 GDAL 的一个问题 --- 取决于您是否认为 .ncdf 是 netCDF 文件的常见文件扩展名。
library(terra)
#terra version 1.0.3
r <- rast(ncol=2, nrow=2, vals=c(5.3, 7.1, 3, 1.2))
注意不同的文件扩展名,.nc、.cdf、.ncdf 或缺失。
# ok
x <- writeCDF(r, "test1.nc", overwrite=TRUE)
y <- writeCDF(r, "test2.cdf", overwrite=TRUE)
# not ok
z <- writeCDF(r, "test3.ncdf", overwrite=TRUE)
#Warning message:
#[rast] unknown extent
a <- writeCDF(r, "test4", overwrite=TRUE)
#Warning message:
#[rast] unknown extent
GDALinfo 显示:
describe("test1.nc")[1]
#[1] "Driver: netCDF/Network Common Data Format"
describe("test3.ncdf")[1]
#[1] "Driver: HDF5Image/HDF5 Dataset"
看起来GDAL在扩展名为.nc或.cdf时首先尝试netCDF驱动程序,但是当它是.ncdf或缺少时它首先尝试HDF5驱动程序---并且因为这不会失败(警告来自 terra,而不是来自 GDAL),这就是它所使用的。
这是windows上的GDAL版本。
gdal()
#[1] "3.0.4"
我看到 GDAL 2.2.3 在 linux 上和 3.2.0 在 mac 上的行为相同。
您可以通过不使用.ncdf 或在打开文件时指定驱动程序来解决此问题:
rast('NETCDF:"test3.ncdf"')
#class : SpatRaster
#dimensions : 2, 2, 1 (nrow, ncol, nlyr)
#resolution : 180, 90 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs
#source : NETCDF:test1.ncdf
#varname : test1
#name : test1
我不认为 CRS 有什么问题(与crs(r) 相同)。但是,我应该注意到 terra 将 proj4 和 wkt 字符串写入 ncdf 文件,并且在这方面不遵循 ncdf 标准。
(您问的是关于仅在 terra 开发版本中可用的方法的问题。我非常感谢,但在这种情况下,在 terra github site 上提出问题会更合适。我将编写 writeCDF当文件扩展名不是.nc或.cdf时给出警告)