【问题标题】:How can I download CHIRPS precipitation data in .gz format?如何下载 .gz 格式的 CHIRPS 降水数据?
【发布时间】:2019-09-26 16:03:22
【问题描述】:

我正在尝试从ftp://ftp.chg.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/2010/ 下载 CHIRPS 数据。 HeavyRain 包已经过时,而 earthEngineGrabR 包(从 Google 的 Earth Engine 中提取数据,https://developers.google.com/earth-engine)似乎有一些错误。以下是我的一些尝试。

lst.files <- list(
 list(
url2 = "ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS -2.0/africa_daily/tifs/p25/2010/chirps-v2.0.2010.01.01.tif.gz"
, target = "chirps-v2.0.2010.01.01.tif.gz"))

#download gzipped files (only if file does not exist)
lapply(lst.files, function(x)
 if(!file.exists(x$target)) download.file(x$url2, x$target))

#open files
lst <- lapply(lst.files, function(x) {
  df <- readr::read_table2(x$target)
  })

这是错误消息: guess_header_(datasource, tokenizer, locale) 中的错误: 在字符串中嵌入 nul:'II*'

这是另一个尝试:

library(RCurl)
library(foreign)
library(plyr)
library(dplyr)

setwd <- "C://Desktop"
url <- "ftp://chg-ftpout.geog.ucsb.edu"
years = c("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019")

lapply(years, function (x){
  url <- paste(url, "/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/", x, ".gz", sep = "")
  filename <- paste("CHIRPS", x, ".gz", sep = "")
  foldername <- paste("CHIRPS", x, sep = "")
  filename

  if (file.exists(filename)==FALSE){
    download.file(url, filename)
  }

  if (file.exists(foldername)==FALSE){
    dir.create(foldername)
  }

  if(length(list.files(path = foldername, pattern="*.gz")) == 0){
    unzip(filename)
    }

  for (fl in (list.files(pattern=".gz"))){
      file.copy(fl, foldername)

    file.remove(fl)
}})

这是错误消息: 尝试 URL 'ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/2010.gz' download.file(url,文件名)中的错误: 无法打开 URL 'ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/2010.gz' 另外:警告信息: 在 download.file(url, filename) : download.file(url,文件名)中的错误: 无法打开 URL 'ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/2010.gz'

下面是使用 earthEngineGrabR 的 github 自述文件中提供的示例,https://github.com/JesJehle/earthEngineGrabR

> library(earthEngineGrabR)
> library(tidyverse)
> library(sf)
> Chirps_data <- ee_grab(data = ee_data_collection(datasetID = 'UCSB-CHG/CHIRPS/DAILY'
+                                          , spatialReducer = 'mean'
+                                          , temporalReducer = 'sum'
+                                          , timeStart = "2016-01-01"
+                                          , timeEnd = "2016-12-31"
+                                          , resolution = 200)
+                        , targetArea = system.file('data/territories.shp', package = 'earthEngineGrabR'))

这是代码开始的输出,但随后卡住了:

自动刷新陈旧的 OAuth 令牌。

上传:地区已上传 是否应该删除文件并重新上传? [是/否]:是 删除的文件: * 地区:1AOc2yzIV1DGDgfUULNA6Co1M37xcWTFLRbdKOegs 创建融合表:地区

错误:使用给定的产品参数无法请求有效数据。 另外:警告信息: 1:在(函数(文本):打印极长的输出被截断 2:数据产品的地球引擎服务器错误:UCSB-CHG-CHIRPS-DAILY_s-mean_t-sum_2016-01-01to2016-12-31 py_call_impl 中的错误(callable,dots$args,dots$keywords):EEException:意外的 HTTP 错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败(_ssl.c:727)

谁能帮我访问这些数据源?

【问题讨论】:

  • 如果我删除 URL 中间的虚假空格,您的第一次尝试对我有用:.../CHIRPS -2.0/...
  • 谢谢@AndrewGustar。当我正在学习如何输入帖子时,虚假空间是一个发布错误。它对我还不起作用,但我会坚持下去。
  • 读取 tif.gz 文件时确实出现错误。我确实让它与这个问题的解决方案一起工作......stackoverflow.com/questions/42088695/…。它引发了一些警告,但至少image(lst[[1]]) 给出了非洲的侧面轮廓!
  • 这是另一种可能值得研究的方法...climateserv.readthedocs.io/en/latest/api.html
  • 嗨@AndrewGustar,我发布了一个解决方案并链接到我找到解决方案的YouTube 视频。感谢您的帮助,它鼓励我在业余时间继续挖掘。

标签: r ftp google-earth-engine


【解决方案1】:

我通过改编此视频https://www.youtube.com/watch?v=EBfx1L16qlM 中的代码找到了一种方法。使用下面的代码,我可以下载给定年份的所有文件,然后我只需通过调整 url 手动重复下一年的代码。这不是一个优雅的解决方案,但它确实有效。

library(RCurl)
setwd("working directory file name")
url <- "ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_daily/tifs/p25/2010/" 
filenames <- getURL(url, ftp.use.epsv = FALSE, dirlistonly = TRUE)
filenames <- strsplit(filenames, "\r\n")
filenames = unlist(filenames)
filenames

for (filename in filenames) {
  download.file(paste(url, filename, sep = ""), paste(getwd(), "/", filename, sep = ""))
}

这会将所有 .gz 文件下载到我的工作目录。欢迎使用更快的解决方案,但这确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多