Как найти среднее растровое значение области, определенной шейп-файлом, используя R?
19
У меня есть набор растровых изображений, которые представляют определенный месяц по годам, и я хочу создать временную шкалу средних значений области, используя шейп-файл.
Как извлечь значения из растров и импортировать их в R так, чтобы я мог их использовать?
Вот пример кода. Довольно просто адаптировать этот код для работы в цикле для обработки всех ваших растров. Если ваши растры имеют общий экстент и разрешение, вы можете создать растровый стек и циклически проходить по полосам в стеке. Чтобы создать вектор, содержащий все растры в каталоге, в определенном формате, вы можете использовать «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)
data.frame(sdata@data, m2012=r.mean)
узнать, какому полигону присвоить какое значение?Прочитать шейп- файл в
SpatialPolygonsDataFrame
(readOGR
функция из пакетаrgdal
)Считать растр в
Raster
объект (raster
функция из пакетаraster
)Используйте,
extract(raster, spdf)
чтобы получить ячейки сетки под каждым полигоном. Тогда бегиmean
на них.Повторите с вашим набором растровых изображений ...
источник