R(光栅):如何使用which.max记录关系

时间:2016-03-20 18:19:11

标签: r r-raster

我是使用R程序的新手。我有一堆10个栅格,其中每个栅格代表在景观上给定点(像素)处发生的生态系统类型(例如针叶林,草地,湿地)的概率(在0和1之间)。所有栅格图层都具有相同数量的行和列。

我一直在使用" which.max"在栅格包中的命令,以找出哪个栅格图层(生态系统类型)在景观上的某个点发生的概率最高。我将生成的栅格保存为ascii栅格文件,并在ArcMap或SAGA中查看它,以了解10种生态系统类型如何在整个研究区域内分布。生成的栅格通过识别栅格堆栈中哪个层具有最高概率来识别每个像素的生态系统类型,因此如果值为" 1",则堆栈中的第一个栅格具有最高的发生概率。关于景观的那一点。

但是,根据我的理解,如果两个或更多栅格具有相同的值,那么" which.max" command只标识一个栅格图层(最后一个带有绑定值的栅格?)。这意味着生成的栅格可能会受到我在栅格堆栈中分配10种生态系统类型的顺序的强烈影响。

我想要做的是生成一个结果光栅记录,如果多个栅格图层具有相同的最大概率,则这些图层将被绑定。例如,我在想如果光栅堆栈中的第4层和第8层具有相同的最大值,那么生成的栅格图层可以通过记录值" 48"来识别它。或者,如果三个栅格图层都具有相同的最大值,则结果值可以是" 259"

有没有人对如何做到这一点有任何建议?

感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

$("#tag").keyup(function() {
        var tagValue = $("#tag").val();
        if (tagValue.length > 2) {
            var data = {}
            data["term"] = $("#tag").val();
            $.ajax({
                type : "POST",
                contentType : "application/json",
                url : "tagvalue.htm",
                data : JSON.stringify(data),
                dataType : 'json',
                timeout : 100000,
                success : function(data) {
                    console.log("SUCCESS: ", data);
                    display(data);
                },
                error : function(e) {
                    console.log("ERROR: ", e);
                    display(e);
                },
                done : function(e) {
                    console.log("DONE");
                }
            });
        }
    });

答案 1 :(得分:0)

这里有一个基于Data Munger的漂亮示例的RasterBrick示例

whiches <- function(i, stat=max) {
    m <- which(i == stat(i, na.rm=TRUE))
    sum(m * 10^(rev(seq_along(m)) - 1))
}

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
x <- calc(b, whiches)

freq(x)
plot(x)

请注意,如果图层少于10层,则只能使用此图层!