【问题标题】:Extracting a variable from multiple hdf files从多个 hdf 文件中提取变量
【发布时间】:2021-07-27 11:10:51
【问题描述】:

我有这 3 个文件 here。试图堆叠它们并提取一个名为“OzoneTropColumn”的变量。我能够提取单个文件的数据,但无法提取多个文件。

library(raster)
library(ncdf4)
list_col1 <- list.files("E:/TES", pattern = "*.hdf", full.names = TRUE) 
ncin1 <- raster::stack(list_col1, varname = "Data Fields/OzoneTropColumn", ncdf=TRUE)

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: r hdfs raster netcdf hdf


    【解决方案1】:

    我不知道这是否真的有效,因为我不是raster 或导入hdf 文件的专家。但是这段代码确实为我加载了 R 中的三个文件,但仍然给出了一些警告:-

    library(raster)
    library(ncdf4)
    list_col1 <- as.list(list.files("E:/TES", pattern = "*.hdf",
                                    full.names = TRUE))
    ncin1 <- raster::stack(list_col1,
                           varname = "Data Fields/OzoneTropColumn",
                           ncdf=TRUE)
    
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_1 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_0 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_1 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_0 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_1 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_0 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_1 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    [1] "vobjtovarid4: **** WARNING **** I was asked to get a varid for dimension named Data Fields/phony_dim_0 BUT this dimension HAS NO DIMVAR! Code will probably fail at this point"
    

    但确实显示它已读取 3 个文件

    ncin1[[1]]
    class      : RasterLayer 
    dimensions : 83, 90, 7470  (nrow, ncol, ncell)
    resolution : 1, 1  (x, y)
    extent     : 0.5, 90.5, 0.5, 83.5  (xmin, xmax, ymin, ymax)
    crs        : NA 
    source     : /home/shawn/Downloads/TES/TES-Aura_L3-O3-M2004m09_F01_12.hdf 
    names      : Data.Fields.OzoneTropColumn.1 
    zvar       : Data Fields/OzoneTropColumn
    
    ncin1[[2]]
    class      : RasterLayer 
    dimensions : 83, 90, 7470  (nrow, ncol, ncell)
    resolution : 1, 1  (x, y)
    extent     : 0.5, 90.5, 0.5, 83.5  (xmin, xmax, ymin, ymax)
    crs        : NA 
    source     : /home/shawn/Downloads/TES/TES-Aura_L3-O3-M2004m10_F01_12.hdf 
    names      : Data.Fields.OzoneTropColumn.2 
    zvar       : Data Fields/OzoneTropColumn
    
    ncin1[[3]]
    class      : RasterLayer 
    dimensions : 83, 90, 7470  (nrow, ncol, ncell)
    resolution : 1, 1  (x, y)
    extent     : 0.5, 90.5, 0.5, 83.5  (xmin, xmax, ymin, ymax)
    crs        : NA 
    source     : /home/shawn/Downloads/TES/TES-Aura_L3-O3-M2004m11_F01_12.hdf 
    names      : Data.Fields.OzoneTropColumn.3 
    zvar       : Data Fields/OzoneTropColumn
    

    【讨论】:

    • 我犯的唯一错误是 as.list(list.files("E:/TES", pattern = ".hdf", full.names = TRUE)) 。我使用了“list_col .hdf", full.names = TRUE)。它确实列出了文件,但我不知道为什么它没有在没有“as.list”的情况下工作。
    • 如果没有as.list,它不能工作的原因是如果你检查函数的文档,它写的是filename (character), Raster* object, missing (to create an empty RasterStack), SpatialGrid*, SpatialPixels*, or list (of filenames and/or Raster* objects). 。所以在我们的例子中,它要求我们传递 list 而不是 character 向量。
    【解决方案2】:

    Robert 发布的脚本运行良好,唯一的区别是使用 as.list 和不使用 as.list]1]1。我在不使用 as.list 之前尝试过。提取的数据丢失其地理参考,原因未知。因此必须在栅格堆栈之后给出范围和投影。谢谢罗伯特。

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2020-09-03
      • 2018-08-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2023-03-13
      • 2018-09-29
      相关资源
      最近更新 更多