Bagaimana Cara Menemukan Nilai Raster Rata-Rata dari suatu area yang ditentukan oleh suatu shapefile menggunakan R?


19

Saya memiliki serangkaian gambar raster yang mewakili bulan tertentu selama bertahun-tahun, dan saya ingin membuat garis waktu dari nilai rata-rata suatu daerah menggunakan shapefile.

Bagaimana cara mengekstrak nilai dari raster dan mengimpornya dalam R dengan cara yang dapat saya gunakan?

Jawaban:


23

Berikut ini contoh kode. Cukup mudah untuk mengadaptasi kode ini agar bekerja dalam satu lingkaran untuk memproses semua raster Anda. Jika raster Anda berbagi tingkat dan resolusi yang sama, Anda dapat membuat raster stack dan loop melalui band-band di stack. Untuk membuat vektor yang berisi semua raster dalam direktori, dalam format tertentu, Anda dapat menggunakan "list.files" dan kemudian meneruskan vektor ini untuk ditumpuk.

Contoh:

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 - solusi luar biasa, ditata dengan baik dan jawaban lengkap.
Simbamangu

Jika saya memiliki multipolygonfile: Bagaimana data.frame(sdata@data, m2012=r.mean)poligon tahu whch untuk menetapkan nilai mana?
Stophface

untuk mendapatkan r.mean ditambahkan dengan benar ke sdata, saya harus terlebih dahulu tidak mendaftar r.mean: r.mean <- batalkan daftar (lapply (r.vals, FUN = mean))
cmbarbu

6

Baca shapefile menjadi SpatialPolygonsDataFrame( readOGRfungsi dari paket rgdal)

Baca raster menjadi Rasterobjek ( rasterberfungsi dari paket raster)

Gunakan extract(raster, spdf)untuk mendapatkan sel-sel kisi di bawah setiap poligon. Kemudian jalankan meanpada mereka.

Ulangi set gambar raster Anda ...


bagaimana cara menulis shapefile (dengan nilai diekstraksi dari gambar raster)?
Stophface
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.