Learn R Programming

tigers (version 0.1-3)

polygon2mask: Convert Polygon to a Raster Mask

Description

Takes a polygon and returns a matrix with a mask that can be input into a raster.

Usage

polygon2mask(XY, extent = NULL, k = 360,
             value = 1L, backgrd = 0L)

Value

a matrix stored as integers; the dimensions of this matrix give the size of the raster.

Arguments

XY

A two-column matrix giving the coordinates of a polygon.

extent

a vector with four numeric values giving the extent of the raster. By default, values are determined to minimally cover the polygon.

k

an integer value giving the number of pixels per unit (i.e., the inverse of the resolution of the raster). The resolution is the same in both directions.

value

the value given to the pixels inside the polygon (converted to integer).

backgrd

idem for the pixels outside the polygon.

Author

Emmanuel Paradis

Details

The mask is returned as a matrix which is filled rowwise (in agreement with the convention used in rasters) and can be input into functions in terra (e.g., rast()).

polygon2mask does basically the same operation than terra::rasterize() but is faster and can produce a vector for masking raster data.

The output matrix is actually row-filled (unlike most matrices in R which are column-filled). It should be transposed before passed to terra::rast(), or its dim attribute can be ignored if used as a mask to a rasted (which is also usually row-filled).

References

Nievergelt, J. and Preparata, F. P. (1982) Plane-sweep algorithms for intersecting geometric figures. Communications of the ACM, 25, 739--747. <doi:10.1145/358656.358681>.

Examples

Run this code
## from ?chullPolygon:
XY <- rbind(c(0, 0),
            c(1, 0),
            c(.25, .25),
            c(.5, .5),
            c(1.2, .8),
            c(1, .78),
            c(0, 1))

layout(matrix(1:9, 3, 3, TRUE))
k <- 2
for (i in 1:9) {
    msk <- polygon2mask(XY, k = k)
    d <- dim(msk)
    image(1:d[1], 1:d[2], msk)
    dm <- paste(d, collapse = "x")
    title(paste("k =", k, ", dim =", dm))
    k <- k * 2
}

layout(1)

Run the code above in your browser using DataLab