像在GIS中一样在R中计算分区统计数据

7ajki6be  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(246)

我有多个光栅在一个文件夹中。我需要提取平均每个这些光栅超过多边形形状文件(有更多的2500多边形)。
我遇到了两个函数zonalextract。它说提取也可以用于点,线和多边形。这是唯一的区别吗?(预期是/否)
如何从这多个栅格中提取平均值,并根据这些提取的平均值的文件名指定不同的列名?
编辑:
我在某个地方找到了一个代码并实现了它。但它永远都在等待,而且毫无进展。

grids <- list.files("my_path", pattern = "*.tif$")

#check the number of files in the raster list (grids)
length <- length(grids)

#read-in the polygon shapefile
poly <- readShapePoly("my_path/supplimentY.shp")

#create a raster stack
s <- stack(paste0("my_path/", grids))

#extract raster cell count (sum) within each polygon area (poly)
for (i in 1:length(grids)){
  ex <- extract(s, poly, fun='mean', na.rm=TRUE, df=TRUE, weights = TRUE)
# the code doesnot progress from here onwards. 
# i checked it by adding this line:: print(i)

}

#write to a data frame
dfr <- data.frame(ex)
w9apscun

w9apscun1#

您不需要循环(您在每次迭代中重复相同的操作!)。
应该是这样的:

library(terra)   
ff <- list.files("my_path", pattern = "\\.tif$", full=TRUE)
s <- rast(ff)

poly <- vect("my_path/supplimentY.shp")
ex <- extract(s, poly, fun='mean', na.rm=TRUE)
#or  ex <- extract(s, poly, fun='mean', na.rm=TRUE, exact=TRUE)

您也可以使用terra::zonal
使用"栅格"包(现已过时),您可以执行以下操作

library(raster)   
ff <- list.files("my_path", pattern = "\\.tif$", full=TRUE)
s <- stack(ff)
poly <- shapefile("my_path/supplimentY.shp")
ex <- extract(s, poly, fun='mean', na.rm=TRUE, df=TRUE, weights = TRUE)
wkyowqbh

wkyowqbh2#

我用同样的代码来计算一个区域边界的气候学的纬向平均值,花了我5- 6分钟的时间来处理2736层的栅格数据。

layers <- length(clim)
        for (i in 1:length(clim)) {
     ex <- extract(clim, shpwb, fun=mean, na.rm=TRUE, df=TRUE)
     }

     df <- data.frame(ex)

     write.csv(df, file = "E:/Central University of Jharkhand/3rd Semester/Climatology/R Studio/CSV.csv")

相关问题