我有一个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)
答案 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]])