如何使用R查找由shapefile定义的区域的平均栅格值?


19

我有一组栅格图像,这些图像表示这些年来的特定月份,并且我想使用shapefile绘制区域平均值的时间表。

如何从栅格中提取值并以可使用的方式将其导入R中?

Answers:


23

这是示例代码。使此代码适应循环处理所有栅格的工作非常简单。如果栅格共享共同的范围和分辨率,则可以创建栅格堆栈并遍历堆栈中的各个波段。要创建包含目录中所有栅格的特定格式的矢量,可以使用“ list.files”,然后将此矢量传递到堆栈。

例:

rlist=list.files(getwd(), pattern="img$", full.names=TRUE) 

r <- stack(rlist)   


    # Add required libraries
    require(raster)
    require(sp)
    require(rgdal)

    # Set working directory, raster, in and out shapefiles
    setwd("C:/test")
    inshp="MyPolys"
    outshp="PolyMeans"
    rdata <- "Year2012.img"

    # Read polygon feature class shapefile
    sdata <- readOGR(dsn=getwd(), layer=inshp)

    # Read raster
    r <- raster(rdata)

    # Extract raster values to list object
    r.vals <- extract(r, sdata)

    # Use list apply to calculate mean for each polygon
    r.mean <- lapply(r.vals, FUN=mean)

    # Join mean values to polygon data
    sdata@data <- data.frame(sdata@data, m2012=r.mean)

    # Write results
    writeOGR(sdata, getwd(), outshp, driver="ESRI Shapefile", check_exists=TRUE, 
         overwrite_layer=TRUE)

1
+1-出色的解决方案,布局合理且完整的答案。
Simbamangu '07年

如果我有一个multipolygonfile:如何data.frame(sdata@data, m2012=r.mean)知道哪个多边形要分配哪个值?
Stophface '16

为了使r.mean正确添加到sdata中,我必须首先取消列出r.mean:r.mean <-unlist(lapply(r.vals,FUN = mean))
cmbarbu

6

将shapefile读入SpatialPolygonsDataFramereadOGR来自包的函数rgdal

将栅格读入Raster对象(raster来自包的函数raster

使用extract(raster, spdf)让每个多边形下的网格单元。然后mean在它们上运行。

重复您的一组光栅图像...


如何写出shapefile(使用从栅格图像中提取的值)?
Stophface '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.