如何从给定行和列的栅格中提取值?

时间:2014-12-23 14:11:25

标签: r extract raster

我有三个栅格,我想在每个栅格中提取与x (row)= 5 and y (column) = 7相对应的值,这样我就会得到三个值。

 r <- raster(nrows=10, ncols=10)
 r <- setValues(r, 1:ncell(r))
 r1 <- raster(nrows=10, ncols=10)
 r1 <- setValues(r1, 1:ncell(r))
 r2 <- raster(nrows=10, ncols=10)
 r2 <- setValues(r1, 1:ncell(r))
St=stack(r,r1,r2)

我试过了               提取物(St,c(5,7))

但这给了:

      extract(St, c(5, 7))
         layer.1 layer.2 layer.3
    [1,]       5       5       5
    [2,]       4      4       4

我将我的实际文件读作:

    dir1<- list.files("/data/datman", "*.img", full.names = TRUE)

    for (i in 1:697) {
         conne <- file(dir1[i], "rb")
        file<- readBin(conne, numeric(), size=4,  n=500*1000, signed=T)
       file <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}

任何帮助?

2 个答案:

答案 0 :(得分:3)

你可以尝试

sapply(St@layers, function(x) cellFromRowCol(x,5,7))

或使用unstack

 sapply(unstack(St), function(x) cellFromRowCol(x,5,7))

更新

根据新信息,您可以尝试

  dir1<- list.files("/data/datman", "*.img", full.names = TRUE)
  rasters <- vector('list', 697)
  for (i in 1:697) {
    conne <- file(dir1[i], "rb")
    file<- readBin(conne, numeric(), size=4,  n=500*1000, signed=T)
    rasters[[i]] <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}
 sapply(rasters,function(x) cellFromRowCol(x,5,7))

答案 1 :(得分:2)

这应该可以解决问题:

如果您要制作要分组的RasterLayer对象列表:

rasters=mget(c('r',paste0('r',1:n))) # n = number of rasters

(请注意,如果您继续使用您在问题中显示的r,r1,r2,r3等格式,这将有效。如果您确实以其他方式命名,则必须对其进行修改)。

然后:

sapply(rasters, function(x) getValues(x,5)[7])

根据您的新编辑,此代码应该执行您需要的所有操作:

dir1<- list.files("/data/datman", "*.img", full.names = TRUE)

n <- 697 # number of rasters to combine

rasters <- vector('list', n)
for (i in 1:n) {
  conne <- file(dir1[i], "rb")
  file<- readBin(conne, numeric(), size=4,  n=500*1000, signed=T)
  rasters[[i]] <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}
unlist(rasters)

sapply(rasters, function(x) getValues(x,5)[7])