【问题标题】:Accessing PERSIANN rainfall data files with R (.bin to raster) [closed]使用 R 访问 PERSIANN 降雨数据文件(.bin 到栅格)[关闭]
【发布时间】:2020-06-07 18:45:39
【问题描述】:

我正在尝试使用 R 包 R 从 PERSIANN 降雨数据集中提取降雨数据。数据采用二进制文件格式 (.bin)。因此,非常感谢使用 R 包 'raster' 将 .bin 文件转换为光栅的任何帮助。

可在此处找到降雨数据(PERSIANN 降雨数据集):ftp://persiann.eng.uci.edu/CHRSdata/PERSIANN-CCS/daily/

我尝试使用来自:R:R: Convert Binary to Raster File 的示例,但我无法让它工作。

这是一个新的降雨数据集,在 R 中使用这些文件的示例/文档很少。

【问题讨论】:

    标签: r spatial binaryfiles raster


    【解决方案1】:

    我显然不熟悉二进制格式,但我尝试了一些东西,也许它会对你有所帮助。 首先,如果没有,请查看数据的自述文件,这有助于理解数据,即使对我来说仍然有点不清楚。

    然后,您可以尝试使用这种代码:

    ##get the data
    f <- "rgccs1d03001.bin.gz"
    ##unzip the data
    library(R.utils)
    gunzip(f)
    f <- "rgccs1d03001.bin"
    ##read the data
    d <- readBin(f, double(), n = 3000*9000, size = 4, endian = "big")
    

    注意:我不是专家,我不完全了解您的数据、您想要做什么或 readBin() 的工作原理。但既然我已经能够用这个加载一些数据,也许你可以从那里开始工作。我使用了参数“double()”和“size = 4”,因为自述文件提到了 4 字节浮点数据,出于同样的原因,选择了大小,因为它们提到了 3000 行和 9000 列的覆盖范围.

    【讨论】:

    • Francois51,感谢您的回复和解决方案。我试过了,我能够得到一些数据,但不幸的是它没有多大意义。数据集是以毫米为单位的每日降雨量值,我使用他的方法得到的数字非常大。我会继续尝试,一旦找到解决方案,我会发布一些东西。
    • 嗨,我编辑了代码,使用了这些信息:rdocumentation.org/packages/base/versions/3.6.2/topics/readBin;对我来说似乎更好:您拥有正确数量的数据,正确解释缺失值(-9999),并且这些值有意义。我只是不知道您对输出的确切期望。在这里,它是一个包含 2700000 个值的向量,但我猜你会期望一个数据框?
    • 尽管收到了正确的答案,但这个问题一直在关闭(见下文和 Robert Hijmans 的答案)。 Stackoverflow,通过第二次关闭此问题(在发布正确答案之后),您只是剥夺了人们对这个问题的答案,如果他们正在搜索它。我有代码,坦率地说,这就是我所需要的。我很想看到一个如何让这个利基问题更加“集中”的例子.....
    【解决方案2】:

    以下似乎有效

    创建“grd”文件模板。只做一次

    library(raster)
    r <- raster(xmn=0, xmx=360, ymn=-60, ymx=60, nrow=3000, ncol=9000, crs="+proj=longlat +datum=WGS84")
    values(r) <- 1
    r <- writeRaster(r, "test.grd", datatype="FLT4S")
    x <- readLines("test.grd")
    x[grep("byteorder", x)] <- "byteorder=big"
    x[grep("nodatavalue", x)] <- "nodatavalue=-9999"
    writeLines(x, "test.grd")
    

    获取数据。 1个文件示例——你当然可以写一个循环来获取它们

    url <- "ftp://persiann.eng.uci.edu/CHRSdata/PERSIANN-CCS/daily/rgccs1d03001.bin.gz"
    gzf <- basename(url)
    download.file(url, gzf)
    R.utils::gunzip(gzf)
    

    将 bin 文件扩展名重命名为 gri 并复制 grd 文件以匹配名称

    f <- gsub("\\.gz$", "", gzf)
    file.rename(f, extension(f, "gri"))
    fg <- extension(f, "grd")
    file.copy("test.grd", fg)
    

    创建一个光栅层;乘以得到正确的最小/最大值。和rotate 获取从-180 到180 的坐标。

    r <- raster(fg) * 1
    r <- rotate(r, filename=paste0("ok_", fg))
    
    # looks ok
    plot(r)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2017-02-24
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多