Package 'fasterize'

Title: Fast Polygon to Raster Conversion
Description: Provides a drop-in replacement for rasterize() from the 'raster' package that takes polygon vector or data frame objects, and is much faster. There is support for the main options provided by the rasterize() function, including setting the field used and background value, and options for aggregating multi-layer rasters. Uses the scan line algorithm attributed to Wylie et al. (1967) <doi:10.1145/1465611.1465619>.
Authors: Noam Ross [aut] (Original author, <https://orcid.org/0000-0002-2136-0000>), Michael Sumner [cre, ctb] , Jeroen Ooms [ctb], Antoine Stevens [ctb], EcoHealth Alliance [cph], USAID PREDICT [fnd]
Maintainer: Michael Sumner <[email protected]>
License: MIT + file LICENSE
Version: 1.1.0
Built: 2024-11-18 04:24:33 UTC
Source: https://github.com/ecohealthalliance/fasterize

Help Index


Rasterize a vector or dataframe object of polygons

Description

Rasterize set of polygons

Usage

fasterize(
  sf,
  raster,
  field = NULL,
  fun = "last",
  background = NA_real_,
  by = NULL
)

Arguments

sf

a polygon vector or data frame object with a geometry column of POLYGON and/or MULTIPOLYGON (equivalent) objects.

raster

A raster object. Used as a template for the raster output. Can be created with raster::raster(). The fasterize package provides a method to create a raster object from an polygon dataset.

field

character (or numeric vector). The name of a column in sf, providing a value for each of the polygons rasterized. If NULL (default), all polygons will be given a value of 1. If a numeric vector this value will be used as the value given to the pixel. (No recycling is done).

fun

character. The name of a function by which to combine overlapping polygons. Currently takes "sum", "first", "last", "min", "max", "count", or "any". Future versions may include more functions or the ability to pass custom R/C++ functions. If you need to summarize by a different function, use ⁠by=⁠ to get a RasterBrick and then raster::stackApply() or raster::calc() to summarize.

background

numeric. Value to put in the cells that are not covered by any of the features of x. Default is NA.

by

character. The name of a column in sf by which to aggregate layers. If set, fasterize will return a RasterBrick with as many layers as unique values of the by column.

Details

This is a high-performance replacement for raster::rasterize().

The algorithm is based on the method described in course materials provided by Wayne O. Cochran. The algorithm is originally attributed to Wylie et al. (1967) doi:10.1145/1465611.1465619.

Note that original implementation worked only for sf dataframes of class "sf", but this now works for any polygon vector (sfc, wkt, wkb, geos) or dataframe with a polygon vector supported by the wk package handlers.

Value

A raster of the same size, extent, resolution and projection as the provided raster template.

References

Wylie, C., Romney, G., Evans, D., & Erdahl, A. (1967). Half-tone perspective drawings by computer. Proceedings of the November 14-16, 1967, Fall Joint Computer Conference. AFIPS '67 (Fall). doi:10.1145/1465611.1465619

Examples

library(wk)
library(fasterize)
p123 <- c(paste0("POLYGON ((-180 -20, -140 55, 10 0, -140 -60, -180 -20),", 
                 "(-150 -20, -100 -10, -110 20, -150 -20))"), 
            "POLYGON ((-10 0, 140 60, 160 0, 140 -55, -10 0))", 
            "POLYGON ((-125 0, 0 60, 40 5, 15 -45, -125 0))")
pols <- data.frame(value = seq_along(p123), geometry = wk::as_wkt(p123))
ex <- as.numeric(wk_bbox(pols))[c(1, 3, 2, 4)]
r <- raster::raster(raster::extent(ex), res = 1)
r <- fasterize(pols, r, field = "value", fun="sum")
plot(r)