【问题标题】:R: Convert Binary to Raster FileR:将二进制文件转换为光栅文件
【发布时间】:2019-01-08 21:01:24
【问题描述】:

我打算做的很简单。我下载了二进制文件(例如这个:ftp://ftp.star.nesdis.noaa.gov/pub/smcd/jhuang/npp.viirs.aerosol.data/edraot550/monthly/2015/),并希望使用 R 将它们转换为常规光栅格式(例如 tif)。这些文件包含有关气溶胶光学厚度的网格化全局数据。

我尝试使用x <- readBin(filename, "double", endian = "little") 读取文件。但是,生成的对象仅包含一个数字。插入另一个 what 选项而不是 double 只会更改给定的数字,但不能解决问题。

数据源没有提供头文件。文档 (ftp://ftp.star.nesdis.noaa.gov/pub/smcd/jhuang/npp.viirs.aerosol.data/edraot550/1README.txt) 提供了有关 Fortran 和 IDL 的 cmets,我完全没有经验。因此,在 R 中完成这个相当简单的任务会很棒。直觉上,解决方案应该是一两个命令的问题。

感谢您的任何 cmets 和建议。

【问题讨论】:

    标签: r binary r-raster file-conversion rgdal


    【解决方案1】:

    类似于 Robert Hijmans 的回答,但从零开始创建光栅对象:

    library(raster)
    
    x <- readBin('~/Downloads/npp_aot550_edr_gridded_0.25_201503_201505_am.bin','double', n = 1036800, endian = "little")
    
    x[x < -900] <- NA
    
    m <- matrix(data = x, nrow = 720, ncol = 1440, byrow = T)
    
    r <- flip(raster(m, xmn=-180, xmx=180, ymn=-90, ymx=90),direction = 2)
    
    library(classInt)
    library(RColorBrewer)
    library(sp)
    
    pal = brewer.pal(7,"Greens")
    brks.qt = classIntervals(x[!is.na(x)], n = 7, style = "quantile")
    
    spplot(r, at=brks.qt$brks,col.regions=pal)
    

    顺便说一句,当我读取值时,有 -999.9,而不是文档中所说的 -9999.0。

    【讨论】:

      【解决方案2】:

      对于这个文件:

      g <- 'npp_aot550_edr_gridded_0.25_201503_201505_am.bin.gz'
      

      先解压

      library(R.utils)
      gunzip(g)
      

      现在您可以使用list.files 来获取bin 文件

      f <- list.files(pattern='\\.bin$')[1]
      

      但是我只会硬编码它:

      f <- 'npp_aot550_edr_gridded_0.25_201503_201505_am.bin'
      

      制作与描述的分辨率相匹配的模板栅格以获取范围和分辨率。

      library(raster)
      r <- raster(res=.25)
      

      保存到文件。数据类型设置文件大小,这就是我可以看到它必须是“FLT8S”的方式。

      writeRaster(r, 'test.grd', datatype='FLT8S', overwrite=T)
      

      复制标题

      file.copy('test.grd', extension(f, '.grd'))
      

      用值重命名文件

      file.rename(f, extension(f, '.gri'))
      

      创建一个 RasterLayer 对象并设置正确的 NA 标志值

      r <- raster(extension(f, '.gri'))
      NAvalue(r) <- -999.9
      

      这些值是从下到上存储的,因此需要“翻转”。我在同一步骤中将它们保存到 tif 文件中

      x <- flip(r, 'y', filename=extension(f, 'tif'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        相关资源
        最近更新 更多