【问题标题】:Reading and working with FireModis HDF files in R在 R 中读取和使用 FireModis HDF 文件
【发布时间】:2019-12-29 00:58:18
【问题描述】:

我正在尝试使用 hdfeos 信息中心 (https://hdfeos.org/software/r.php) 提供的说明读取 Modis Fire HDF 文件,代码如下:

sds<-get_subdatasets("modis_file")
#Modis_fire/MCD64A1.A2000306.h12v11.006.2017012010432.hdf"
d5<-readGDAL(sds[1],options=c("RASTERXDIM=4","RASTERYDIM=3","RASTERBDIM=2","RASTER4DIM=1","RASTER5DIM=0"))
#"HDF4_EOS:EOS_GRID:/Modis_fire/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:Burn Date"

但是,我收到此错误:

option 0: RASTERXDIM=4
option 1: RASTERYDIM=3
option 2: RASTERBDIM=2
option 3: RASTER4DIM=1
option 4: RASTER5DIM=0
Error in .local(.Object, ...) :

我不想翻译和编写其他格式的 HDF,因为我希望在编写转换之前执行一些操作,例如合并和裁剪:

r<-raster(d5)

有什么建议吗?

【问题讨论】:

    标签: r gdal r-raster hdf


    【解决方案1】:

    阅读link 提供的文档,您正在尝试创建一个 5 维数据集。

    我最好的猜测是,你使用的是普通的 GDAL(而不是这个 GEE?),这似乎是你错误的原因(根据link):

    RASTERXDIM、...、RASTER4DIM 选项允许您访问 5 维数据集,它们仅在 GEE 中可用。如果使用常规的 GDAL,则无法正确访问数据集。

    但如果你只是想读取和处理 HDF 文件,这很好用:

    library(MODIS)
    
    ## Note: I'm using the MODIS package to download the HDF file (not necessary if you have it on disk.
    
    # the hdf variable will be the path to the file
    hdf <- getHdf(HdfName = 'MCD64A1.A2000306.h12v11.006.2017012010432.hdf',forceDownload=T)
    
    # print the subdatasets
    
    gdalUtils::get_subdatasets(hdf)
    
    # [1] "HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:Burn Date"            
    # [2] "HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:Burn Date Uncertainty"
    # [3] "HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:QA"                   
    # [4] "HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:First Day"            
    # [5] "HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:Last Day"   
    
    sds <- gdalUtils::get_subdatasets(hdf)
    
    r <- raster(sds[1])
    
    # check raster output
    r
    
    # class       : RasterLayer 
    # dimensions  : 2400, 2400, 5760000  (nrow, ncol, ncell)
    # resolution  : 463.3127, 463.3127  (x, y)
    # extent      : -6671703, -5559753, -3335852, -2223901  (xmin, xmax, ymin, ymax)
    # coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs 
    # data source : HDF4_EOS:EOS_GRID:/tmp/Rtmp9QhqAG/MODIS_ARC/MODIS/MCD64A1.006/2000.11.01/MCD64A1.A2000306.h12v11.006.2017012010432.hdf:MOD_Grid_Monthly_500m_DB_BA:Burn Date 
    # names       : MCD64A1.A2000306.h12v11.006.2017012010432.hdf.MOD_Grid_Monthly_500m_DB_BA.Burn_Date 
    # values      : -32768, 32767  (min, max)
    

    【讨论】:

    • 嗨@Val。我试过你的代码,在光栅过程之前它工作得很好。当我尝试运行r&lt;-raster(sds[1])行时​​,我收到错误Error in .local(.Object, ...) : Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : 不能从此文件创建一个 RasterLayer 对象。(文件不存在)。对可能发生的事情有任何想法吗?
    • @AnaCarolinaPessoa 可能是版本问题,可能是raster 包或底层gdal - 仅供参考,这是我的raster 版本:`raster_2.9-5`
    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 2013-05-08
    • 2014-08-05
    • 2014-06-03
    • 2021-07-30
    • 2023-02-16
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多