【问题标题】:Does anyone know how to download TRMM 3B42 time series data?有谁知道如何下载 TRMM 3B42 时间序列数据?
【发布时间】:2016-11-19 02:41:28
【问题描述】:

我正在尝试从此NASA FTP server 下载给定时间跨度的 TRMM 3B42 3 小时二进制数据。

有一个由 Florian Detsch 编写的优秀代码,用于下载包含在 GitHub-only Rsenal 包中的日常产品(这里是链接:https://github.com/environmentalinformatics-marburg/Rsenal/blob/master/R/downloadTRMM.R)。不幸的是,它不适用于 3 小时的数据。

我改了代码:

downloadTRMM <- function(begin, end, dsn = ".", format = "%Y-%m-%d.%H") {

  ## transform 'begin' and 'end' to 'Date' object if necessary
  if (!class(begin) == "Date")
    begin <- as.Date(begin, format = format)

  if (!class(end) == "Date")
    end <- as.Date(end, format = format)

  ## trmm ftp server
  ch_url <-"ftp://disc2.nascom.nasa.gov/data/TRMM/Gridded/3B42_V7/"

  ## loop over daily sequence
  ls_fls_out <- lapply(seq(begin, end, 1), function(i) {

    # year and julian day (name of the corresponding folder)
    tmp_ch_yr <- strftime(i, format = "%Y%m")
    #tmp_ch_dy <- strftime(i, format = "%j")

    # trmm date format
    tmp_dt <- strftime(i+1, format = "%Y%m%d.%H")

    # list files available on server
    tmp_ch_url <- paste(ch_url, tmp_ch_yr, "", sep = "/")

    tmp_ch_fls <- tmp_ch_fls_out <- character(2L)
    for (j in 1:2) {
      tmp_ch_fls[j] <- paste0("3B42.", tmp_dt, "z.7.precipitation", 
                              ifelse(j == 1, ".bin"))

      tmp_ch_fls[j] <- paste(tmp_ch_url, tmp_ch_fls[j], sep = "/")
      tmp_ch_fls_out[j] <- paste(dsn, basename(tmp_ch_fls[j]), sep = "/")

      download.file(tmp_ch_fls[j], tmp_ch_fls_out[j], mode = "wb")
    }

    # return data frame with *.bin and *.xml filenames
    tmp_id_xml <- grep("xml", tmp_ch_fls_out)
    data.frame(bin = tmp_ch_fls_out[-tmp_id_xml], 
               xml = tmp_ch_fls_out[tmp_id_xml], 
               stringsAsFactors = FALSE)

  })

  ## join and return names of processed files
  ch_fls_out <- do.call("rbind",ls_fls_out)
  return(ch_fls_out)
}

getwd()

setwd("C:/Users/joaoreis/Documents/Bases_Geograficas/trmm_3h/")

fls_trmm <- downloadTRMM(begin = "2008-01-01.00", end = "2008-01-05.00")
fls_trmm

但我收到以下错误:

尝试网址 'ftp://disc2.nascom.nasa.gov/data/TRMM/Gridded/3B42_V7//200801//3B42.20080102.00z.7.precipitation.bin' 下载文件中的错误(tmp_ch_fls[j],tmp_ch_fls_out[j],mode = “wb”) : 无法打开网址 'ftp://disc2.nascom.nasa.gov/data/TRMM/Gridded/3B42_V7//200801//3B42.20080102.00z.7.precipitation.bin' 另外:警告信息:在download.file(tmp_ch_fls[j], tmp_ch_fls_out[j], mode = "wb") : InternetOpenUrl 失败: '' 调用 来自:download.file(tmp_ch_fls[j], tmp_ch_fls_out[j], mode = "wb")

有人知道如何使用 R 修复它吗?

谢谢!

【问题讨论】:

  • 修改原始代码以适应3小时的数据看起来并不难。你都尝试了些什么?你遇到了什么错误?
  • @thecatalyst,数据的存储方式存在一些差异。例如文件名,一个使用朱利安日(daily data),另一个使用一年中每个月的一个文件夹来存储数据文件(3-hour data)。我认为这就是为什么不起作用。我正在尝试解决,但我还不能在 R 中做很多事情,我只是通常使用 raster 包。

标签: r download ftp


【解决方案1】:

从提交909f98a 开始,我已启用从ftp://disc3.nascom.nasa.gov/data/s4pa/TRMM_L3 自动检索每3 小时一次的数据。确保您使用

安装了最新版本的 Rsenal
devtools::install_github("environmentalinformatics-marburg/Rsenal")

然后看看?downloadTRMM 中的示例。目前,该函数同时支持character(需要将“格式”参数传递给strptime)和POSIXlt 输入。例如,像

downloadTRMM(begin = "2015-01-01 12:00", end = "2015-01-03 12:00", 
             type = "3-hourly", format = "%Y-%m-%d %H:%M")

现在可以正常下载 2015 年 1 月 1 日至 3 日(中午到中午)的 3 小时数据。

请注意,与您提到的 FTP 服务器相比,数据采用 .HDF 格式,目前尚未实现 rasterize 方法,这意味着您必须自己处理容器文件。关于数据的自动光栅化,我会尽快找出更方便的方法。

【讨论】:

  • 我来晚了,但我没有忘记谢谢。您的 Rsenal 套餐帮了大忙。我提到了另一个 FTP 链接,因为我认为在 R 中使用 .bin 数据比使用 .hdf 更容易。但没关系。我将等待并关注包的开发(自动光栅化)。谢谢@fdetsch!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2011-06-25
相关资源
最近更新 更多