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`

.

```
randomPolygons(
ras = rast(ext(0, 15, 0, 15), res = 1, vals = 0),
numTypes = 2,
...
)
randomPolygon(x, hectares, area)
# S3 method for default
randomPolygon(x, hectares, area)
```

## Arguments

- ras
A raster that whose extent will be used for the random polygons.

- numTypes
Numeric value. The number of unique polygon types to use.

- ...
Other arguments passed to `spread`

. No known uses currently.

- x
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`

).

- hectares
Deprecated. Use `area`

in meters squared.

- area
A numeric, the approximate area in `meters squared`

of the random polygon.

## Value

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`

.

## Examples

```
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.
```