Generic function to post process objects

The method for spatialObjects (Raster* and Spatial*) will crop, reproject, and mask, in that order. This function is a wrapper for cropInputs, fixErrors, projectInputs, maskInputs and writeOutputs, with a decent amount of data manipulating between these calls so that the crs match.

postProcess(x, ...)

# S3 method for spatialObjects
postProcess(x, filename1 = NULL, filename2 = TRUE,
  studyArea = NULL, rasterToMatch = NULL, overwrite = TRUE,
  useSAcrs = FALSE, useCache = getOption("reproducible.useCache", FALSE),



An object of postProcessing, e.g., spatialObjects. See individual methods.


Additional arguments passed to methods. For spatialObjects, these are: cropInputs, fixErrors, projectInputs, maskInputs, determineFilename, and writeOutputs. Each of these may also pass ... into other functions, like writeRaster, or sf::st_write. This might include potentially important arguments like datatype, format. Also passed to projectRaster, with likely important arguments such as method = "bilinear". See details.

... passed to:

projectInputsprojectRastermaskInputsfastMask or intersect
fixErrorsbufferwriteOutputswriteRaster or shapefile
* Can be overridden with useSAcrs ** Will mask with NAs from rasterToMatch if maskWithRTM

Character strings giving the file paths of the input object (filename1) filename1 is only used for messaging (i.e., the object itself is passed in as x) and possibly naming of output (see details and filename2).


filename2 is optional, and is either NULL (no writing of outputs to disk), or several options for writing the object to disk. If TRUE (the default), it will give it a file name determined by .prefix(basename(filename1), prefix). If a character string, it will use this as its file name. See determineFilename.


SpatialPolygons* object used for masking and possibly cropping if no rasterToMatch is provided. If not in same CRS, then it will be spTransformed to CRS of x before masking. Currently, this function will not reproject the x. Optional in postProcess.


Template Raster* object used for cropping (so extent should be the extent of desired outcome) and reprojecting (including changing the resolution and projection). See details in postProcess.


Logical. Should downloading and all the other actions occur even if they pass the checksums or the files are all there.


Logical. If FALSE, the default, then the desired projection will be taken from rasterToMatch or none at all. If TRUE, it will be taken from studyArea. See table in details below.


Passed to Cache in various places. Default FALSE

Post processing sequence

If the rasterToMatch or studyArea are passed, then the following sequence will occur:

  1. Fix errors fixErrors. Currently only errors fixed are for SpatialPolygons using buffer(..., width = 0).

  2. Crop using cropInputs

  3. Project using projectInputs

  4. Mask using maskInputs

  5. Determine file name determineFilename

  6. Write that file name to disk, optionally writeOutputs

NOTE: checksumming does not occur during the post-processing stage, as there are no file downloads. To achieve fast results, wrap prepInputs with Cache

NOTE: sf objects are still very experimental.

Passing rasterToMatch and/or studyArea

Depending on which of these were passed, different things will happen to the targetFile located at filename1.

If targetFile is a Raster* object:

* Can be overridden with useSAcrs ** Will mask with NAs from rasterToMatch if maskWithRTM

If targetFile is a Spatial* object:

* Can be overridden with useSAcrs

See also



# Add a study area to Crop and Mask to # Create a "study area" library(sp) library(raster) ow <- setwd(tempdir()) # make a SpatialPolygon coords1 <- structure(c(-123.98, -117.1, -80.2, -100, -123.98, 60.9, 67.73, 65.58, 51.79, 60.9), .Dim = c(5L, 2L)) Sr1 <- Polygon(coords1) Srs1 <- Polygons(list(Sr1), "s1") shpEcozone <- SpatialPolygons(list(Srs1), 1L) crs(shpEcozone) <- "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" # make a "study area" that is subset of larger dataset coords <- structure(c(-118.98, -116.1, -99.2, -106, -118.98, 59.9, 65.73, 63.58, 54.79, 59.9), .Dim = c(5L, 2L)) Sr1 <- Polygon(coords) Srs1 <- Polygons(list(Sr1), "s1") StudyArea <- SpatialPolygons(list(Srs1), 1L) crs(StudyArea) <- "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" #' #' ########## shpEcozonePostProcessed <- postProcess(shpEcozone, studyArea = StudyArea)
#> No cacheRepo supplied. Using value in getOption('reproducible.cachePath')
#> loading memoised result from previous cropInputs call.
#> Checking for errors in SpatialPolygon
#> Found no errors.
#> No cacheRepo supplied. Using value in getOption('reproducible.cachePath')
#> loading memoised result from previous projectInputs call.
#> No cacheRepo supplied. Using value in getOption('reproducible.cachePath')
#> loading memoised result from previous maskInputs call.
#> Saving output to ./Smallfile12bc45d4e055. Specify filename1 or filename2 for more control
#' # Try manually, individual pieces shpEcozoneReprojected <- projectInputs(shpEcozone, StudyArea) shpEcozoneCropped <- cropInputs(shpEcozone, StudyArea)
#> cropping ...
shpEcozoneClean <- fixErrors(shpEcozone)
#> Checking for errors in SpatialPolygon
#> Found no errors.
shpEcozoneMasked <- maskInputs(shpEcozone, StudyArea)
#> intersecting ...
#> Checking for errors in studyArea
#> Found no errors.