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?
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 - 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.
data.frame(sdata@data, m2012=r.mean)
poligon tahu whch untuk menetapkan nilai mana?Baca shapefile menjadi
SpatialPolygonsDataFrame
(readOGR
fungsi dari paketrgdal
)Baca raster menjadi
Raster
objek (raster
berfungsi dari paketraster
)Gunakan
extract(raster, spdf)
untuk mendapatkan sel-sel kisi di bawah setiap poligon. Kemudian jalankanmean
pada mereka.Ulangi set gambar raster Anda ...
sumber