Jak znaleźć średnią wartość rastrową obszaru zdefiniowanego przez plik kształtu za pomocą R?

19

Mam zestaw obrazów rastrowych, które reprezentują konkretny miesiąc na przestrzeni lat i chcę utworzyć oś czasu średnich wartości obszaru za pomocą pliku kształtu.

Jak wyodrębnić wartości z rastrów i zaimportować je w R w sposób, w jaki mogę je wykorzystać?

nickves
źródło

Odpowiedzi:

23

Oto przykładowy kod. Dostosowanie tego kodu do pracy w pętli do przetwarzania wszystkich rastrów jest dość proste. Jeśli twoje rastry mają wspólny zasięg i rozdzielczość, możesz utworzyć stos rastrowy i zapętlić pasma w stosie. Aby utworzyć wektor zawierający wszystkie rastry w katalogu, w określonym formacie, możesz użyć „list.files”, a następnie przekazać ten wektor do stosu.

Przykład:

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
źródło
1
+1 - doskonałe rozwiązanie, dobrze ułożona i pełna odpowiedź.
Simbamangu,
Jeśli mam plik data.frame(sdata@data, m2012=r.mean)wieloboczny : Skąd wiadomo, do którego wielokąta przypisać jaką wartość?
Stophface,
aby poprawnie dodać r.mean do sdata, musiałem najpierw usunąć listę r.mean: r.mean <- unlist (lapply (r.vals, FUN = mean))
cmbarbu
6

Przeczytaj plik shapefile w SpatialPolygonsDataFrame( readOGRfunkcja z pakietu rgdal)

Wczytaj raster do Rasterobiektu ( rasterfunkcja z pakietu raster)

Użyj, extract(raster, spdf)aby uzyskać komórki siatki pod każdym wielokątem. Potem meanna nich biegnij .

Powtarzaj na swoim zestawie obrazów rastrowych ...

Spacedman
źródło
jak wypisać plik kształtu (z wartościami wyodrębnionymi z obrazu rastrowego)?
Stophface,