Чтение файлов GlobSnow HDF4 в R

Я пытаюсь прочитать файлы .hdr в R. Файлы взяты из 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 через homebrew, но не знаю, как заставить это работать в R. Я открыл данные в HDFview, и данные кажутся правильными. Просто не существует простого способа получить доступ к этим данным в R. Я надеюсь получить растр или матрицу из файла .hdf.


person mflem    schedule 28.07.2017    source источник


Ответы (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 для каждого поднабора данных, существующего в наборе данных.

person Badger    schedule 28.07.2017