将像素二进制文件交错的波段转换为栅格网格

时间:2015-10-02 15:43:09

标签: r matrix binary raster

我有一个BIP二进制文件https://drive.google.com/open?id=0BwkLXkUMkLd4SnBmUHNmMW5CcDg 以下信息:

ncol <- 193 
nrow <- 94  
xmin <- -180
xmax<-  180
ymin <- -88.542000
ymax <- 88.542000

该文件有365个波段,我希望能够将它们转换为栅格网格(栅格堆栈)。 我可以阅读R中的文件,但我不知道如何处理这些乐队。以下是我到目前为止所做的事情:

cnt <- ncol*nrow*365
data <- readBin(file,what= "double", n=cnt, size=4,endian=.Platform$endian)
data.m <- matrix(data, ncol=193, nrow=94) # I don't know how to add the bands
data.r <- raster(data.m, xmn=xmin, xmx=xmax, ymn=ymin, ymx=ymax)
plot(data.r)

2 个答案:

答案 0 :(得分:2)

您还可以编写头文件。例如,重命名&#39; Tavg.dat&#39;到&#39; Tavg.gri&#39;并将以下内容保存到名为&#39; Tavg.grd&#39;

的文本文件中
[georeference]
nrows=94
ncols=193
xmin=-180
ymin=-88.542
xmax=180
ymax=88.542
projection=+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
[data]
datatype=FLT4S
byteorder=little
nbands=365
bandorder=BIP
nodatavalue=-9999
[description]
layername=''

然后你可以做

library(raster)
b <- brick('Tavg.grd')

答案 1 :(得分:1)

使用raster :: brick,因为它是一个基于具有多个波段(包括BIL和BIP)的文件创建多波段栅格的功能。 如果它偶然无法识别您的georef数据,您可以在读取文件时将其作为参数输入:ncols = 193,xmn = -180,xmx = 180,ymn = -88.542000,ymx = 88.542000,nl = 365。

以下是基于您提供的文件的示例实现。由于它未被识别为BIP文件,因此您首先必须将其读取并将其转换为3D数组。然后,您只需将其与brick命令一起使用即可创建栅格堆栈。现在,棘手的是数据文件的维度,其顺序与brick命令不兼容,因此您必须使用aperm函数转置维度。之后,可以直接将整个数组转换为地理参考堆栈。

wd="D:/temp/"
setwd(wd)
library(raster)
ncol <- 193 
nrow <- 94  
nbands <- 365
cnt <- ncol*nrow*nbands
data <- readBin("Tavg.dat",what= "double", n=cnt, size=4,endian=.Platform$endian)
data2=array(data,c(nbands, ncol, nrow))
data2 <- aperm(data2, c(3,2,1)) #for transposing
raster_brick=brick(data2, xmn=-180, xmx=180, ymn=-88.542000, ymx=88.542000)
plot(raster_brick[[1]])

这是第一个乐队形象: enter image description here