来自栅格计算器的条件命令转移到R

时间:2016-09-21 13:32:15

标签: r conditional arcgis raster r-raster

到目前为止,我在ArcGIS的栅格计算器中使用了以下语句:

Con(("Land_use.rst" ==  -20), "Export.rst")

这会计算一个新的Raster,它只包含Land_use等于-20的Export数据。这正是我想要的。但我希望在R中自动完成此操作,因为我必须多次这样做。

到目前为止,我有这样的事情:

for (catch_dir in Dir_List) {

r1 <- raster(paste0(catch_dir, '/Export.rst'))

r2 <- raster(paste0(catch_dir,'/LAND_use.rst'))

### statement that output export_streams.rst contains the data of export.rst where LAND_use.rst equals -20.
  x <- overlay(r2, r1, fun=function(x,y){ y[x!=-20] <- 0; y})

 writeRaster(x, filename = paste0(catch_dir, "/export_streams.rst"), format="IDRISI", NAflag = 0, datatype = "FLT4S",
              overwrite=TRUE)
}

该代码执行以下操作: 它产生一个栅格,其中包含r1的值,其中r2 = -20。所以这很好,但是在栅格的边界也有剩余物,它们在r2中不等于-20。两个栅格的范围是相同的。所以叠加可能不适用于我的任务。还有其他想法而不是叠加?也许有些if(r2 == -20){ }命令?

2 个答案:

答案 0 :(得分:0)

我没有你的数据,所以我无法重现你的错误。不过这就是我用伪数据做的方法:

#create dummy matrix
a <- matrix(c(10,10,10,10,10,10,10,10,10),nrow=3)
b <- matrix(c(-20,-20,-20,3,3,3,4,4,4),nrow=3)

#create raster from matrix
r1 <- raster(a)
r2 <- raster(b)

#Create raster with same extent and nrows/ncols as original rasters
x <- raster(r1)

#produce raster x which contains the values of r1 where r2 = -20
x[r2[]==-20] <- r1[r2[]==-20]

答案 1 :(得分:0)

你可以这样做:

m <- subs(r2, cbind(-20, 1))
x <- mask(r1, m)