Skip to contents

This function performs thinning of spatial points by assigning them to grid cells based on a specified resolution or thinning distance. It can either create a new raster grid or use an existing raster object.

Usage

grid_thinning(
  coordinates,
  thin_dist = NULL,
  resolution = NULL,
  origin = NULL,
  raster_obj = NULL,
  trials = 10,
  all_trials = FALSE,
  crs = "epsg:4326",
  priority = NULL
)

Arguments

coordinates

A numeric matrix or data frame with two columns representing the x (longitude) and y (latitude) coordinates of the points.

thin_dist

A numeric value representing the thinning distance in kilometers. It will be converted to degrees if `resolution` is not provided.

resolution

A numeric value representing the resolution (in degrees) of the raster grid. If provided, this takes priority over `thin_dist`.

origin

A numeric vector of length 2 (for example, `c(0, 0)`), specifying the origin of the raster grid (optional).

raster_obj

An optional `terra` SpatRaster object to use for grid thinning. If provided, the raster object will be used instead of creating a new one.

trials

An integer specifying the number of trials to perform for thinning (default: 10).

all_trials

A logical value indicating whether to return results for all trials (`TRUE`) or just the first trial (`FALSE`, default).

crs

An optional CRS (Coordinate Reference System) to project the coordinates and raster (default WGS84). This can be an EPSG code, a PROJ.4 string, or a `terra::crs` object.

priority

A of the same length as the number of points with numerical values indicating the priority of each point. Instead of eliminating points randomly, the points are preferred according to these values.

Value

A list of logical vectors indicating which points to keep for each trial.

Examples

# Example: Grid thinning using thin_dist
coordinates <- matrix(c(-122.4194, 37.7749,
                        -122.4195, 37.7740,
                        -122.4196, 37.7741), ncol = 2, byrow = TRUE)

result <- grid_thinning(coordinates, thin_dist = 10, trials = 5, all_trials = TRUE)
print(result)
#> [[1]]
#> [1]  TRUE  TRUE FALSE
#> 
#> [[2]]
#> [1]  TRUE  TRUE FALSE
#> 
#> [[3]]
#> [1]  TRUE  TRUE FALSE
#> 
#> [[4]]
#> [1]  TRUE  TRUE FALSE
#> 
#> [[5]]
#> [1] FALSE  TRUE  TRUE
#> 

# Example: Grid thinning using a custom resolution
result_res <- grid_thinning(coordinates, resolution = 0.01, trials = 5)
print(result_res)
#> [[1]]
#> [1]  TRUE  TRUE FALSE
#> 

# Example: Using a custom raster object
library(terra)
#> terra 1.7.78
rast_obj <- terra::rast(nrows = 100, ncols = 100, xmin = -123, xmax = -121, ymin = 36, ymax = 38)
result_raster <- grid_thinning(coordinates, raster_obj = rast_obj, trials = 5)
print(result_raster)
#> [[1]]
#> [1]  TRUE FALSE FALSE
#>