# Raster brick from raster masks by sectors (R)

The goal is to divide a raster file into quadrants in order to make some computation in each. I'd like to split the raster and create a raster brick with those parts. I don't need to get perfect clips of the raster so the cell with data in the border of the clip could be also present in the contiguous raster brick.

I'm thinking about creating a radial grid and then extract the raster by masking it with each of the polygons within. I found these interesting questions about the topic.

How can be done this in R ?

• Note 1: number of quadrants must be a parameter.
• Note 2: raster brick must have same extension as the original raster.
• Note 3: process must be done in R (a function would be perfect)

Update 10/06/2020: I hope this schema clarifies the purpose: A Function that given a raster and a number of sectors it creates a raster brick (with number of rasters = number of sectors) where each raster keeps just the values within the correspondent sector.

• The polygons that define each quadrant only have three points (eg `(0,0)->(xmax,0)->(xmax,ymax)`) so you can define these polygons in eight very short lines. Have you tried? Jun 8, 2020 at 19:19
• note: raster always have a rectangular extent. Therefore splitting by sectors is not so effiient. Jun 14, 2020 at 19:58
• Had you seen this: gis.stackexchange.com/questions/255025/… ? It is not a duplicate, but examples there must be useful. For each sector polygon i would use x:`c(sin(k*2*pi/8)*width,0,sin((k+1)*2*pi/8)*width)` y:`c(cos(k*2*pi/8)*width,0,cos((k+1)*2*pi/8)*width)`, k ranges from 0 to 7, width is raster width. Those polygons will be surely bigger than needed, but must work just fine. Jun 15, 2020 at 19:33
• You need to be much more clear on this. Is your input a square (NxN cell) raster stack and you want the output to be 8 smaller (N/2 x N/2) raster stacks which are square crops of the source and NA-masked by the circle segment? Jun 16, 2020 at 8:01
• Or do you have a general raster stack, and given a centre point and radius you want the 8 cropped raster stacks with NA-masking outside the circle segment? Jun 16, 2020 at 8:03

EDIT: Changed the function so it can now generate number of slices other than multiples of 4.

I've come up with a solution using the sf package and rotating points around the raster. Here's what a slice looks like.

It works perfectly, you can test it out yourself:

``````#' Sector Masking
#' @description Slices Raster object into sections
#'
#' @param raster Raster* object
#' @param segments Number of segments to be sliced
#'
#' @return RasterBrick containing slices in bands
#'
#' @import raster
#' @import sf
#' @import magrittr
#'
library(raster)
library(sf)
library(magrittr)

# Get properties of raster
dem <- brick(raster)
ext <- extent(dem)
crs <- as.character(crs(dem))

# Calculate mid and max point of the raster
half_x <- (ext@xmax - ext@xmin) / 2
half_y <- (ext@ymax - ext@ymin) / 2
middle <- st_point(c(ext@xmin+half_x, ext@ymin+half_y))
max_ext <- st_point(c(ext@xmax, ext@ymax))

# Rotates a starting point around the middle of the raster
# These points are used to generate triangles which are masking the raster
slices <- list()
starting_point <- max_ext
rot <- function(a) matrix(c(cos(a), sin(a), -sin(a), cos(a)), 2, 2)
rotation <- segments/2
for(i in 1:segments){
next_point <- (starting_point - middle) * rot(pi/rotation) + middle
slice_matrix <- rbind(middle,
starting_point,
next_point,
middle)
slice_polygon <- slice_matrix %>%
list() %>%
st_polygon() %>%
st_sfc(crs = crs) %>%
st_sf
slice_raster <- rasterize(slice_polygon, dem, mask = T)
slices[[i]] <- slice_raster
starting_point <- next_point
}
return(stack(slices))
}
``````
• Thanks for the answer. I will try it as soon as possible. Jun 17, 2020 at 12:09
• Does it work for you? Jun 19, 2020 at 6:09
• It works and the rasters keep extent, so that's perfect. I found that with less than 4 segments, the tool behaves weird, but I can try to figure it out. Good job. Jun 19, 2020 at 6:48
• Oh yes, I didn't think too much about the edge cases. For three and two segments you would probably have to build the polygon in two steps. Otherwise parts of the raster will be cut off. Jun 19, 2020 at 7:12