1

在 netCDF 文件中写入栅格时,我总是收到警告消息:“[rast] unknown extent”。实际上,范围没有写入外部文件。crs也不是。

library(terra)
#terra version 1.0.2

r <- rast(ncol=2, nrow=2, vals=c(5.3, 7.1, 3, 1.2))
crs(r)<-"epsg:27572"
ext(r)
#SpatExtent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)

t<-writeCDF(r,"test.ncdf",overwrite=TRUE)
#Warning message:
#[rast] unknown extent
 
ext(t)  # extension is not correct
#SpatExtent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)

crs(t)  # crs is not correct
#[1] "GEOGCRS[\"unknown\",\n    DATUM[\"World Geodetic System 1984\",\n     ...

也许这里使用了一种特殊的语法。我探索?writeCDF但找不到任何线索。在此先感谢您的帮助。

4

1 回答 1

1

这指出了 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 在扩展名是.ncor时首先尝试 netCDF 驱动程序.cdf,但是当它是.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 站点上提出问题会更合适。我会让 writeCDF 发出警告当文件扩展名不是.nc.cdf)

于 2020-12-21T18:42:34.523 回答