未由writeCDF写入的光栅的范围和crs



在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, 0, 1 (xmin, xmax, ymin, 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"

当扩展名为.nc.cdf时,GDAL似乎首先尝试netCDF驱动程序,但当它为.ncdf或丢失时,它首先尝试HDF5驱动程序——由于这不会失败(警告来自terra,而不是GDAL(,这就是它所使用的。

这是windows上的GDAL版本。

gdal()
#[1] "3.0.4"

我在linux上看到了与GDAL 2.2.3和在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网站上提出问题会更合适。当文件扩展名不是.nc.cdf时,我会让writeCDF发出警告(

最新更新