Como encontrar o valor médio de varredura de uma área definida por um shapefile usando R?

19

Eu tenho um conjunto de imagens rasterizadas que representam um mês específico ao longo dos anos e quero fazer uma linha do tempo dos valores médios de uma área usando um shapefile.

Como extraio os valores das rasters e os importo em R de maneira que eu possa usá-los?

nickves
fonte

Respostas:

23

Aqui está o código de exemplo. É bastante simples adaptar esse código para trabalhar em loop para processar todos os seus rasters. Se seus rasters compartilham uma extensão e resolução comuns, você pode criar uma pilha de varredura e percorrer as faixas da pilha. Para criar um vetor contendo todas as rasters em um diretório, em um formato específico, você pode usar "list.files" e depois passar esse vetor para a pilha.

Exemplo:

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)
Jeffrey Evans
fonte
1
+1 - excelente solução, resposta bem definida e completa.
Simbamangu
Se eu tiver um arquivo multipolígono: como o data.frame(sdata@data, m2012=r.mean)polígono sabe qual atribuir qual valor?
Stophface
para obter r.mean adicionado correctamente aos sdata eu tinha que primeiro r.mean itens não listados: r.mean <- itens não listados (lapply (r.vals, FUN = média))
cmbarbu
6

Leia o shapefile em um SpatialPolygonsDataFrame( readOGRfunção do pacote rgdal)

Leia a varredura em um Rasterobjeto ( rasterfunção do pacote raster)

Use extract(raster, spdf)para obter as células da grade em cada polígono. Então corra meanneles.

Repita o processo em conjunto de imagens rasterizadas ...

Spacedman
fonte
como escrever o shapefile (com os valores extraídos da imagem rasterizada)?
Stophface