尝试从此链接下载NDIV数据 https://gimms.gsfc.nasa.gov/MODIS/std/GMOD09Q1/tif/NDVI/2009/001/
由于NDVI数据来自图块,因此我指定了我想要的图块
h.tile <- c("08","09","10", "11", "12", "13", "14", "15", "16")
v.tile <- c("09", "10", "11", "12", "13", "14")
我要下载2009年和001天
for(h in seq_along(h.tile)){
for(v in seq_along(v.tile)){
horizontal <- h.tile[h]
vertical <- v.tile[v]
time.stamp <- paste0("GMOD09Q1.A2009001.08d.latlon.x",horizontal,"y",vertical,".6v1.NDVI.tif.gz")
URL <- "https://gimms.gsfc.nasa.gov/MODIS/std/GMOD09Q1/tif/NDVI/2009/001/"
full.link <- paste0(URL, time.stamp)
output <- paste0(time.stamp)
curl::curl_fetch_disk(paste0(full.link), path = output)
}}
这会将NDVI文件下载到一个文件夹。我想合并图块以生成单个图像
首先解压缩.tif文件
ndvi.files <- list.files()
ldply(.data = ndvi.files, .fun = gunzip) # note: this will remove the .gz files
现在合并
ndvi.files <- list.files()
raster.list <- list()
for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}
但是,某些下载的文件为空,因此上述循环将不起作用。如果没有文件为空,则以下代码将起作用并将所有单个图块合并为一个。
raster.list$filename <- 'test.tif'
raster.list$overwrite <- TRUE
m <- do.call(merge, raster.list)
plot(m)
我的问题在上面的循环中
for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}
循环中是否有任何方法,我可以排除空文件。我可以转到文件夹并手动删除所有空文件。但是,此循环是更大循环的一部分,因此我无法提前说出哪些文件为空。因此,基本上,我希望能够运行上述循环,以便仅在raster.list
中读取那些填充的栅格。另外,R中有什么方法可以在运行循环之前删除空文件
`for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}`