#' @name bbox_sp
#' @rdname bbox_sp
#'
#' @title Bounding boxes as spatial objects
#'
#' @description
#' Bounding boxes of raster (class `Raster*`) objects will be converted either
#' to [SpatialPointsDataFrame-class] or [SpatialPointsDataFrame-class].
#'
#' This function extract the corners including the bounding box of the input
#' raster or extension and writes either four spatial points or a rectangle as
#' polygon.
#'
#' @param raster An object of class `Raster*` or [Extent-class].
#' @param geom Character value indicating the geometry of output (either point
#' or polygon).
#' @param proj4 Character vector indicating the `proj4string` (required only
#' for inputs of class [Extent-class]).
#' @param ... Further arguments passed among methods (not yet used).
#'
#' @return Either a [SpatialPointsDataFrame-class] or a
#' [SpatialPolygonsDataFrame-class] object.
#'
#' @author Lukas Trübenbach and Miguel Alvarez (\email{kamapu78@@gmail.com}).
#'
#' @examples
#' require(raster)
#'
#' r <- raster(system.file("external/test.grd", package = "raster"))
#' plot(r)
#' plot(bbox_sp(r, "polygon"), border = "darkgreen", lwd = 3, add = TRUE)
#' plot(bbox_sp(r, "point"), col = "red", pch = 16, cex = 3, add = TRUE)
#'
#' @exportMethod bbox_sp
#'
setGeneric(
"bbox_sp",
function(raster, ...) {
standardGeneric("bbox_sp")
}
)
#' @rdname bbox_sp
#' @aliases bbox_sp,Extent-method
#'
setMethod(
"bbox_sp", signature(raster = "Extent"),
function(raster, proj4 = "", geom = "point", ...) {
geom <- pmatch(geom, c("point", "polygon"))
if (!geom %in% c(1, 2)) {
stop("Invalid value for argument 'geom'.")
}
# Extension as points
if (geom == 1) {
raster <- data.frame(
fid = 1:4,
longitude = c(
raster@xmin, raster@xmin, raster@xmax,
raster@xmax
),
latitude = c(
raster@ymin, raster@ymax, raster@ymax,
raster@ymin
)
)
coordinates(raster) <- ~ longitude + latitude
proj4string(raster) <- CRS(proj4)
}
# rasterension as polygon
if (geom == 2) {
raster <- Polygons(
list(Polygon(cbind(
c(
raster@xmin, raster@xmin,
raster@xmax, raster@xmax
),
c(
raster@ymin, raster@ymax,
raster@ymax, raster@ymin
)
))),
ID = "bbox"
)
raster <- SpatialPolygons(list(raster), proj4string = CRS(proj4))
raster <- SpatialPolygonsDataFrame(raster, data.frame(fid = 1),
match.ID = FALSE
)
}
return(raster)
}
)
#' @rdname bbox_sp
#' @aliases bbox_sp,RasterLayer-method
#'
setMethod(
"bbox_sp", signature(raster = "RasterLayer"),
function(raster, geom = "point", ...) {
return(bbox_sp(extent(raster), proj4string(raster), geom, ...))
}
)
#' @rdname bbox_sp
#' @aliases bbox_sp,RasterStack-method
#'
setMethod(
"bbox_sp", signature(raster = "RasterStack"),
function(raster, geom = "point", ...) {
return(bbox_sp(extent(raster), proj4string(raster), geom, ...))
}
)
#' @rdname bbox_sp
#' @aliases bbox_sp,RasterBrick-method
#'
setMethod(
"bbox_sp", signature(raster = "RasterBrick"),
function(raster, geom = "point", ...) {
return(bbox_sp(extent(raster), proj4string(raster), geom, ...))
}
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.