无法使用 terra 将 hd5 文件导出到 tif

问题描述 投票:0回答:1

我正在使用 terra 从 MODIS 仪器导入 hdf 文件。我筛选 NDVI 变量,并希望导出为 tif。当我这样做时,我遇到了错误。

您可以使用以下示例 URL 自行下载栅格: https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/MOD13Q1.061/MOD13Q1.A2017049.h12v04.061.2021267000402/MOD13Q1.A2017049.h12v04 .061.2021267000402.hdf

这是代码:

path = "/Users/sample/MODIS"

omi <- list.files(path, pattern = "MOD",full.names = TRUE)

for (i in omi){
  print(i)
  fname = paste(substr(i,86,126),'.tif',sep="")
  r1 <- terra::rast(i) ## select the variable name
  r2 = r1$`"250m 16 days NDVI"`
  writeRaster(r2, fname)
}

错误如下:

Error: [writeRaster] too few values for writing: 0 < 23040000
In addition: Warning messages:
1: GDreadfield() failed for block. (GDAL error 1) 
2: MOD13Q1.A2016353.h12v04.061.2021363152532.hdf":MODIS_Grid_16DAY_250m_500m_VI:"250m 16 days NDVI", band 1: IReadBlock failed at X offset 0, Y offset 0: GDreadfield() failed for block. (GDAL error 1) 

这里的错误在哪里?

r raster terra hdf
1个回答
0
投票

我怀疑您的

.hdf
文件已损坏,下面是上面链接文件的示例:

r <- terra::rast("~/Downloads/MOD13Q1.A2017049.h12v04.061.2021267000402.hdf")

terra::writeRaster(r$`"250m 16 days NDVI"`, filename = "~/Downloads/111.tif", overwrite = TRUE)
terra::rast("~/Downloads/111.tif")
#> class       : SpatRaster 
#> dimensions  : 4800, 4800, 1  (nrow, ncol, nlyr)
#> resolution  : 231.6564, 231.6564  (x, y)
#> extent      : -6671703, -5559753, 4447802, 5559753  (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      : 111.tif 
#> name        : "250m 16 days NDVI" 
#> min value   :           -20000000 
#> max value   :            99890000

创建于 2024-03-26,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.