在R中读取GlobSnow HDF4文件

时间:2017-07-28 18:26:55

标签: r gis hdf

我正在尝试读取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文件中获取栅格或矩阵。

1 个答案:

答案 0 :(得分:0)

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来拉取每个单独的数据集时,如果没有&#34; subatasets&#34;它只会抛出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的文件。