ошибка функции rast с изображениями HDF MOD09GA в R

У меня загружено несколько образов MODIS. Когда я пытаюсь создать SpatRaster из файлов hdf, используя функцию terra rast, она отлично работает для 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

В чем проблема? Есть ли какая-либо другая функция, которую я мог бы использовать? Спасибо!


person Samantha    schedule 21.10.2020    source источник


Ответы (1)


Проблема в том, что в файле есть поднаборы данных с разным разрешением.

Чтобы получить файл, который вы используете

# 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, 2400, 7  (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 
#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, ... 
person Robert Hijmans    schedule 22.10.2020
comment
Большое спасибо!! - person Samantha; 22.10.2020