These are built with the spread()
function internally.
Produces a SpatVector
polygons object with 1 feature that will have approximately an area
equal to area
(expecting area in hectares), #' and a centre at approximately x
.
A raster that whose extent will be used for the random polygons.
Numeric value. The number of unique polygon types to use.
Other arguments passed to spread
. No known uses currently.
Either a SpatVector
, or SpatialPoints
(deprecated), SpatialPolygons
(deprecated),
or matrix
with two dimensions, 1 row, with the approximate centre of the new random
polygon to create.
If matrix
, then longitude and latitude are assumed (epsg:4326
).
Deprecated. Use area
in meters squared.
A numeric, the approximate area in meters squared
of the random polygon.
A map of extent ext
with random polygons.
A SpatVector
polygons object, with approximately the area request,
centred approximately at the coordinates requested, in the projection of x
.
spread()
, randomPolygons()
origDTThreads <- data.table::setDTthreads(2L)
origNcpus <- options(Ncpus = 2L)
set.seed(1234)
Ras <- randomPolygons(numTypes = 5)
if (interactive() ) {
terra::plot(Ras, col = c("yellow", "dark green", "blue", "dark red"))
}
# more complex patterning, with a range of patch sizes
r <- terra::rast(terra::ext(0, 50, 0, 50), resolution = 1, vals = 0)
a <- randomPolygons(numTypes = 400, r)
#> duplicate initial loci are provided
a[a < 320] <- 0
a[a >= 320] <- 1
clumped <- terra::patches(a)
if (interactive()) {
terra::plot(a)
}
# clean up
data.table::setDTthreads(origDTThreads)
options(Ncpus = origNcpus)
a1 <- terra::vect(cbind(-110, 59), crs = "epsg:4326")
a2 <- randomPolygon(a1, area = 1e7)
#> The CRS provided is not in meters; converting internally to UTM so area will be approximately correct.
if (interactive()) {
terra::plot(a1)
terra::points(a2, pch = 19)
}
if (require("sf", quietly = TRUE)) {
b1 <- list(cbind(
x = c(-122.98, -116.1, -99.2, -106, -122.98),
y = c(59.9, 65.73, 63.58, 54.79, 59.9)
)) |>
sf::st_polygon() |>
sf::st_sfc() |>
sf::st_sf(geometry = _, ID = 1L, shinyLabel = "zone2", crs = "epsg:4326")
b2 <- randomPolygon(b1, area = 1e10)
if (interactive()) {
plot(sf::st_geometry(b1))
plot(sf::st_geometry(b2), add = TRUE)
}
}
#> The CRS provided is not in meters; converting internally to UTM so area will be approximately correct.