ELSA 包(空间关联):我的分类栅格数据未按预期运行。

ELSA package (spatial association): My categorical raster data do not behave as intended

提问人:eazyezy 提问时间:11/16/2023 更新时间:11/18/2023 访问量:27

问:

我已经开始使用软件包 (https://cran.r-project.org/web/packages/elsa/vignettes/elsa.html) 来测量分类数据的基于熵的空间关联,但它主要围绕栅格数据展开,我以前对此几乎没有经验。
我的数据来自一个.tif文件,我在QGIS中将其像素值重新分类为5个类别。
elsa

library(raster)

r <- new("RasterLayer", file = new(".RasterFile", name = "C:\\Users\\bluew\\Desktop\\stefano\\ELSA\\are_1.81_3003.tif", 
                              datanotation = "FLT4S", byteorder = "little", nodatavalue = -Inf, 
                              NAchanged = FALSE, nbands = 1L, bandorder = "BIL", offset = 0L, 
                              toptobottom = TRUE, blockrows = c(rows = 1L), blockcols = c(cols = 1062L), 
                              driver = "gdal", open = FALSE), data = new(".SingleLayerData", 
                                                                         values = logical(0), offset = 0, gain = 1, inmemory = FALSE, 
                                                                         fromdisk = TRUE, isfactor = FALSE, attributes = list(), haveminmax = TRUE, 
                                                                         min = 1, max = 5, band = 1L, unit = "", names = "are_1.81_3003"), 
    legend = new(".RasterLegend", type = character(0), values = logical(0), 
                 color = logical(0), names = logical(0), colortable = logical(0)), 
    title = character(0), extent = new("Extent", xmin = 1478031.1565, 
                                       xmax = 1563459.1172, ymin = 4933676.6029, ymax = 5009134.9516), 
    rotated = FALSE, rotation = new(".Rotation", geotrans = numeric(0), 
                                    transfun = function () 
                                      NULL), ncols = 1062L, nrows = 662L, crs = new("CRS", 
                                                                                    projargs = "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs"), 
    srs = "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs", 
    history = list(), z = list())

r <- setMinMax(r,force=T)

我将其提交给函数:elsa

library(elsa)

e <- elsa(r,d=500,categorical = T) #the d argument defines the neighbourhood of each pixel

这应该会产生一个包含每个像素的 ELSA 值的对象,但我的结果有点奇怪:RasterLayer

library(tmap)

cl <- colorRampPalette(c('darkblue','yellow','red','black'))(100)

tm_shape(e) + tm_raster(palette= cl, title = "ELSA",style="cont") +
tm_layout(legend.outside = T) 

正如您在下面看到的,看起来好像只在每个类别的边缘计算值,这没有意义。

Example

我上面链接的小插图中提供的示例看起来完全不是这样,但是没有关于如何准备栅格数据的进一步文档,而且正如我所说,我对如何处理它们的经验很少。
这很可能与我在QGIS中对栅格进行重新分类的方式有关,但我真的说不出来;我尝试将我的栅格与包中提供的栅格进行比较,但无法发现显着差异。
谁能给我指出可能导致这种结果的方向? 感谢任何提供建议的人。

GIS 栅格 空间 R-Raster Terra

评论

0赞 Robert Hijmans 11/17/2023
请提供一个可翻译的例子。无法使用您创建的栅格,因为它依赖于我们没有或不希望拥有的文件:“C:\\Users\\bluew\\Desktop\\stefano\\ELSA\\are_1.81_3003.tif”
0赞 eazyezy 11/18/2023
谢谢你的提醒,我没有注意到。我找到了我在答案中描述的解决方案。

答:

0赞 eazyezy 11/18/2023 #1

事实证明,“边界”效应只是栅格分辨率过高的结果,这对于我正在处理的数据类型来说并不理想,因为不同的类别往往覆盖大面积;我将QGIS中栅格文件的分辨率更改为更合理的数量(约2500米),结果更符合我的预期。enter image description here