[R-sig-Geo] Help needed with extraction of raster statistics by polygons

Denys Dukhovnov denn2duk at yahoo.com
Tue Aug 25 17:26:45 CEST 2015


Hello all! 

I need to spatially calculate 30-meter grid raster mean over US Census blocks in North East region (approx. 1.9 mln street blocks/polygons). I came up with the script that runs in parallel, but it still takes days to complete, even when the i7 CPU is used up to the max. My question: is there any other way to improve the processing speed given the set-up below (I included the backbone of the script to save space). I am new to R, so any help will be much appreciated. Thanks a lot!

Regards,
Denys
____________________________

library(sp)
library(rgdal)
library(raster)
library(foreach)
library(spatial.tools)

Grid30m <- raster("raster.tif")    # loading main raster into R
NEfips <- c(09, 10, 11, ....)       # list of state FIPS codes, whose street block polygons are to be processed
ShapePath <- "T:\\..."              # path to block shapefiles 

sfQuickInit(cpus=8)                 # setting up and registering parallel processing back-end

for (x in NEfips)     {
    State <- paste("block_", x , sep="")
    Blocks <- readOGR(dsn=ShapePath, layer=State[1], stringsAsFactors=F)    # loading the block polygons
    BlocksReproject <- spTransform(Blocks, crs(Grid30m))
    
    GridMean <- foreach (i=1:length(BlocksReproject$GEOID10), .combine='c', .packages="raster") %dopar% {        # Parallel processing loop for extracting mean raster value per street block polygon
           extract(Grid30m, BlocksReproject[i], fun=mean)
    }
    write.table(...)    # Generating output containing the mean raster statistics for each block polygon.
}

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list