【问题标题】:Reading GlobSnow HDF4 files in R在 R 中读取 GlobSnow HDF4 文件
【发布时间】:2017-07-29 03:26:48
【问题描述】:

我正在尝试读取 R 中的 .hdr 文件。这些文件来自 GlobSnow,可以在以下位置找到 http://www.globsnow.info/swe/archive_v2.0/2013/L3A_daily_SWE_HDF/

我使用了 gdalUtils 包,它似乎适用于 MODIS 数据,但不适用于 GlobSnow 数据。我试过这个:

sd <- get_subdatasets("GlobSnow_SWE_L3A_20130101_v2.0.hdf")
gdal_translate(sd[2], sds=T, dst_dataset = "hdftrial.tif")

但是它返回 NULL。

我也尝试过通过自制软件安装 gdal,但不确定如何在 R 中进行安装。我在 HDFview 中打开了数据,数据似乎是正确的。似乎没有一种简单的方法可以在 R 中访问这些数据。我希望从 .hdf 文件中获取栅格或矩阵。

【问题讨论】:

    标签: r gis hdf


    【解决方案1】:

    NULL 也适合我,只需跟进raster("hdftrial.tif"),它就可以毫无问题地加载光栅。 NULL 出现是因为您没有子数据集 (sds),您故意只调用单个数据集,但是如果您不声明,hdf 似乎不会读取子数据集。

    library(gdalUtils)
    library(raster)
    sd <- get_subdatasets("c:/_LOCALdata/GlobSnow_SWE_L3A_20130101_v2.0.hdf")
    gdal_translate(sd[2], dst_dataset = "hdftrial.tif")
    
    plot(raster("hdftrial.tif"))
    

    当您使用 gdal_translate 提取它们都存在的每个单独的数据集时,如果没有“子数据集”,它只会抛出 NULL。

    来自gdal_translate

     if (output_Raster) {
            if (missing(sds)) {
                return(brick(dst_dataset))
            }
            else {
                if (!sds) {
                    return(brick(dst_dataset))
                }
                else {
                    return(NULL)
                }
            }
        }
        else (return(NULL))
    

    更新:

    gdal_translate("c:/_LOCALdata/GlobSnow_SWE_L3A_20130101_v2.0.hdf", sds=T, of="GTiff", dst_dataset = "hdftrial.tif")
    

    您不需要 get_subdatasets,因为它在内部进行。通过声明 sds=T 它将为每个子数据集创建一个单独的文件。它仍然抛出NULL,试图破译原因。对于数据集中存在的每个子数据集,您将获得一个包含 _#.tif 的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2016-06-25
      • 2012-04-14
      • 2015-05-11
      相关资源
      最近更新 更多