R中的MOD09GA hdf图像出现光栅函数错误

问题描述

我下载了一些MOdis图像。当我尝试使用terra rast函数从hdf文件创建SpatRaster时,它对于“ MOD09A1”非常适用,但对“ MOD09GA”却无效。

terra::rast("C:/Users/User/AppData/Local/Temp/_modis/MOD09GA.A2011025.h08v06.006.2015216102410.hdf")

Error: [rast] number of rows and/or columns do not match

出什么问题了?我还有其他功能可以使用吗?谢谢!

解决方法

问题在于文件具有不同分辨率的子数据集。

要获取您正在使用的文件

# remotes::install_github("rspatial/luna")
aoi <- c(-106,-105,26,27)
f <- luna::getModis("MOD09GA","2011-01-25","2011-01-26",aoi,download=TRUE,path=".",user="*",password="*")
f 
[1] "./MOD09GA.A2011025.h08v06.006.2015216102410.hdf"

要查看子数据集:

library(terra)
describe_sds(f)
id   name                                                          desc                                                               nrow ncol nlyr
 1   HDF4_EOS:EOS_GRID:...MODIS_Grid_1km_2D:num_observations_1km   [1200x1200] num_observations_1km MODIS_Grid_1km_2D (8-bit integer) 1200 1200    1
(...)
12        HDF4_EOS:EOS_GRID:...MODIS_Grid_500m_2D:sur_refl_b01_1   [2400x2400] sur_refl_b01_1 MODIS_Grid_500m_2D (16-bit integer) 2400 2400    1
(...)

因此,您需要像这样分别访问不同的子数据集

b1 <- rast(f,12)
b2 <- rast(f,13)
b1
# class       : SpatRaster 
# dimensions  : 2400,2400,1  (nrow,ncol,nlyr)
# resolution  : 463.3127,463.3127  (x,y)
# extent      : -11119505,-10007555,2223901,3335852  (xmin,xmax,ymin,ymax)
# coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs 
# data source : MOD09GA.A2011025.h08v06.006.2015216102410.hdf:MODIS_Grid_500m_2D:sur_refl_b01_1 
# names       : sur_refl_b01_1 

也许之后

bb <-c(b1,b2)

或创建一个这样的SpatDataSet

x <- sds(f,12:22)

terra的开发版本中,您可以继续进行操作

y <- collapse(x)

或类似下面的内容来获取一组特定的子数据集(具有相同的空间分辨率)

r  <- rast(f,12:18)
r
#class       : SpatRaster 
#dimensions  : 2400,7  (nrow,nlyr)
#resolution  : 463.3127,y)
#extent      : -11119505,ymax)
#coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs 
#source(s)   : MOD09GA.A2011025.h08v06.006.2015216102410.hdf:MODIS_Grid_500m_2D:sur_refl_b01_1  
          MOD09GA.A2011025.h08v06.006.2015216102410.hdf:MODIS_Grid_500m_2D:sur_refl_b02_1  
          MOD09GA.A2011025.h08v06.006.2015216102410.hdf:MODIS_Grid_500m_2D:sur_refl_b03_1  
          ... and 4 more source(s)
#names       : sur_refl_b01_1,sur_refl_b02_1,sur_refl_b03_1,sur_refl_b04_1,sur_refl_b05_1,sur_refl_b06_1,...