R:MODIS 原数据下载
目前下载MODIS数据的工具功能不够完整,比如先要下载500米分辨率的LAI数据集MOD15A2H, 无论是MODIS官网提供的网页下载工具daac2disk,还是R论坛提供的ftp协议下载包http://r-gis.net/?q=ModisDownload, 都不能下载MOD15A2H。 这里展示使用R下载http协议的MODIS数据,有兴趣的可以自己研究一下,贴出全部代码 :
rm(list = ls()) setwd("F:/modis/MOD15A2H006/") library(RCurl) library(rgdal)
#去除网页Html标记 cleanFun <- function(htmlString) { return(gsub("<.*?>", "", htmlString)) } #R的防错机制 safe_download <- function(furl, fsave, fmode, fmethod) { tryCatch ( { download.file(url = furl,destfile = fsave,mode = fmode,method = fmethod) }, error = function(cond) { print("error") } ) } #下载数据的地址 MOD15A2H006 <- "http://e4ftl01.cr.usgs.gov/MOLT/MOD15A2H.006/" gg<- getURL(MOD15A2H006) gg<- cleanFun(gg) items <- strsplit(gg, " - \n ")[[1]] items<- items[-1] items<- items[-1* NROW(items)] pp<- strsplit(items, "/ ") dirs <- unlist(lapply(strsplit(items, "/ "), function(x){x[1]})) dates <- unlist(lapply(strsplit(items, "/ "), function(x){x[2]})) dirsURL<- paste(MOD15A2H006, dirs, "/", sep="") #记录日志
sink(file = "log.log",split = T) for (i in 1:length(dirsURL)) { print(dirsURL[i]) dirurl<- dirsURL[i] files<- getURL(dirurl) files<- cleanFun(files) bb <- strsplit(files, " \n ")[[1]] bb<- bb[-1] bb<- bb[-1*NROW(bb)] hh <- unlist( lapply(strsplit(bb, " "), function(x){x[[1]]})) hdffile<- hh[grep(hh, pattern="MOD15A2H.*.h26v05.*.hdf")[1]] gurl = paste(dirurl, hdffile, "", sep="") gsave = paste(getwd(), "/", hdffile, sep="") gmode='wb' gmethod='wininet'
#开始下载 safe_download(furl = gurl, fsave = gsave, fmode = gmode, fmethod = gmethod) print(gurl) } sink()