问题描述
在 netCDF 文件中写入栅格时,我总是收到警告消息:“[rast] 未知范围”。实际上,范围没有写入外部文件。 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,1 (xmin,ymax)
crs(t) # crs is not correct
#[1] "GEOGCRS[\"unkNown\",\n DATUM[\"World Geodetic System 1984\",\n ...
也许这里使用了一种特殊的语法。我探索了 ?writeCDF
但找不到任何线索。预先感谢您的帮助。
解决方法
这指向 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
) 时发出警告