在ArcPy中是否有一个等效于FuzzyOverlay(,“ AND”)的R函数?

时间:2019-05-01 00:59:23

标签: r arcgis arcpy

我正在将适用性模型从arcpy转移到R,并试图找到执行类似于FuzzyOverlay的模糊覆盖的函数或包。哪些R运算会产生与ArcPy中的FuzzyOverlay(,“ AND”)函数相同的输出?

我的模型生成具有0-100值的中间栅格图层,我正尝试通过模糊隶属度进行覆盖

我已经尝试了FuzzySim :: fuzzyOverlay,但是不确定它们是否执行相同的操作。我的模型输入值是0-100,在arcpy FuzzyOverlay中运行得很好,但是FuzzySim :: fuzzyOverlay给出了错误,直到我将值重新缩放为0-1。 下面是对可复制代码的尝试,但同样,不确定是否要使用此函数。

#make 4 rasters
r1 <- raster(xmn = -100, xmx = -60, ymn = 25,  ymx = 50,  res = c(1,1)) 
r2 <- r1
r3 <- r1
r4 <- r1

#fill with random values
r1[] <- runif(ncell(r2), 0, 1)
r2[] <- runif(ncell(r2), 0, 1)
r3[] <- runif(ncell(r3), 0, 1)
r4[] <- runif(ncell(r3), 0, 1)

#stack rasters
rs <- stack(r1, r2, r3, r4)

#perform fuzzyOverlay
xy <- fuzzyOverlay(rs, op = "fuzzy_and")

我想要一个根据ESRI's description返回的输出,“返回输入模糊栅格中的模糊隶属关系的最小值”,最好以栅格格式返回。 我在正确的轨道上吗?

1 个答案:

答案 0 :(得分:1)

给出描述fuzzyAndValue = min(arg1, ..., argn),我认为这只是一个简单的min函数:

#make 4 rasters
r1 <- raster(xmn = -100, xmx = -60, ymn = 25,  ymx = 50,  res = c(1,1)) 
r2 <- r1
r3 <- r1
r4 <- r1

#fill with random values
r1[] <- runif(ncell(r2), 0, 1)
r2[] <- runif(ncell(r2), 0, 1)
r3[] <- runif(ncell(r3), 0, 1)
r4[] <- runif(ncell(r3), 0, 1)

#stack rasters
rs <- stack(r1, r2, r3, r4)

#perform fuzzyOverlay
xy <- min(rs)
plot(xy)