R 中 MOD09GA hdf 图像的 rast 函数错误
rast function error with MOD09GA hdf images in R
我下载了一些 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, 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, ...
我下载了一些 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, 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, ...