交叉堆叠图像R

时间:2016-10-27 11:22:58

标签: r list stack raster intersect

我下载了50张 landsat 8 图片并在子文件夹Landsat8中提取它们

通过迭代包含图像的文件夹列表,我提取了2个带来计算植被索引(LSWI),其中创建了一个函数并称为 calcIndex

for(scene in folders){
 NIR <- raster(b5.tif)
 SWIR1 <- raster(b6.tif)

 LSWI <- overlay(x=nir, y=SWIR1, fun=calcIndex)
 writeraster(LSWI, filename=LSWIxxx.tif, format='GTiff', datatype = 'FLT4s')
}

一切正常,我可以访问所有LSWI.tiff文件并在ArcGIS中导入它们。我的问题与堆叠(或砖块)和使用堆叠文件进行分析有关。

我选择了列表中的所有LSWI.tif文件并堆叠了该列表:

LSWI_list <- list.files(full.names = TRUE, recursive = TRUE, pattern = "LSWI.tif$") 
LSWI_stack <- stack(LSWI_list, quick = TRUE)

我在这里使用了quick = TRUE来确保堆叠工作,尽管图像的范围不同。现在我想使用相交来找到所有图像的最大公共区域并在结果范围内裁剪所有图像,有人可以向我解释如何在大型图像列表中使用交叉函数吗?我想举例说明所有图像的总和,我认为只有在所有范围相等的情况下才能使用。

最重要的是,我想访问一个特定位置(坐标系WGS84,以米为单位的单位是自动分配的),并从该特定位置的图像中导出所有 LSWI值。

希望我明确提出挑战。 谢谢!

1 个答案:

答案 0 :(得分:0)

为了获得最大程度,我认为最好的选择是在感兴趣的区域周围绘制多边形/ shapefile并预先堆叠图像。或者,计算应该显示大多数观察结果落在哪里的非na细胞数,在您的情况下,以下情况应该有效:

rNA <- sum(!is.na(LSWI_stack))    

要访问单个点位置,您需要首先从坐标中创建一个空间对象,将其重新投影到Landsat CRS,然后使用raster :: extract()来获取值。这篇博文详细介绍了大部分内容 https://biologyforfun.wordpress.com/2013/02/24/spatialdataintro/