【问题标题】:Extent and crs of rasters not written by writeCDFwriteCDF 未写入的栅格的范围和 crs
【发布时间】:2021-03-31 00:14:30
【问题描述】:

在 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,但找不到任何线索。提前感谢您的帮助。

【问题讨论】:

    标签: raster netcdf write terra


    【解决方案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在扩展名为.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时给出警告)

    【讨论】:

    • 谢谢,它有效。我不明白的事情:NETCDF 驱动程序如何在使用 HDF5 驱动程序编写后正确读取 .ncdf 文件?
    • GDAL写入后用HDF5驱动打开,返回一个新的SpatRaster对象;该文件不是用该驱动程序写入的。 writeCDF 不使用 GDAL。
    • 好的。很明显。也许“.ncdf”扩展名应该在写入过程中从自动识别的文件扩展名列表中删除,因为它目前被读取为 HDF5,而不是 netCDF?这会误导用户。
    猜你喜欢
    • 2018-03-12
    • 2016-11-03
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多