Come trovare il valore raster medio di un'area definita da uno shapefile usando R?


19

Ho una serie di immagini raster che rappresentano un mese specifico nel corso degli anni e voglio creare una sequenza temporale dei valori medi di un'area usando uno shapefile.

Come estrarre i valori dai raster e importarli in R in modo da poterli utilizzare?

Risposte:


23

Ecco un esempio di codice. È abbastanza semplice adattare questo codice per lavorare in un ciclo per l'elaborazione di tutti i raster. Se i tuoi raster condividono un'estensione e una risoluzione comuni, puoi creare uno stack raster e scorrere le bande nello stack. Per creare un vettore contenente tutti i raster in una directory, in un formato specifico, è possibile utilizzare "list.files" e quindi passare questo vettore per impilarlo.

Esempio:

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: soluzione eccellente, risposta ben organizzata e completa.
Simbamangu,

Se ho un multipolygonfile: come fa a data.frame(sdata@data, m2012=r.mean)sapere a quale poligono assegnare a quale valore?
Stophface

per ottenere r.mean aggiunto correttamente a sdata ho dovuto prima deselezionare r.mean: r.mean <- unlist (lapply (r.vals, FUN = mean))
cmbarbu

6

Leggi lo shapefile in a SpatialPolygonsDataFrame( readOGRfunzione dal pacchetto rgdal)

Leggi il raster in un Rasteroggetto ( rasterfunzione dal pacchetto raster)

Utilizzare extract(raster, spdf)per ottenere le celle della griglia sotto ciascun poligono. Quindi corri meansu di loro.

Ripeti il ​​tuo set di immagini raster ...


come scrivere lo shapefile (con i valori estratti dall'immagine raster)?
Stophface
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.