Skip to contents

build_lines creates a SpatialLines object from a data.table. The function accepts a data.table with relocation data, individual identifiers a sorting column and a projection. The relocation data is transformed into SpatialLines for each individual and optionally, each splitBy. Relocation data should be in two columns representing the X and Y coordinates.

Usage

build_lines(
  DT = NULL,
  projection = NULL,
  id = NULL,
  coords = NULL,
  sortBy = NULL,
  splitBy = NULL
)

Arguments

DT

input data.table

projection

character string defining the projection to be passed to sp::CRS. For example, for UTM zone 36S (EPSG 32736), the projection argument is 'EPSG:32736'. See details.

id

Character string of ID column name

coords

Character vector of X coordinate and Y coordinate column names

sortBy

Character string of date time column(s) to sort rows by. Must be a POSIXct.

splitBy

(optional) character string or vector of grouping column name(s) upon which the grouping will be calculated

Value

build_lines returns a SpatialLines object with a line for each individual (and optionally splitBy combination).

An error is returned when an individual has less than 2 relocations, making it impossible to build a line.

Details

The projection argument expects a character string defining the EPSG code. For example, for UTM zone 36N (EPSG 32736), the projection argument is 'EPSG:32736'. See https://spatialreference.org for a list of EPSG codes. Please note, R spatial has followed updates to GDAL and PROJ for handling projections, see more at https://r-spatial.org/r/2020/03/17/wkt.html.

The sortBy is used to order the input data.table when creating SpatialLines. It must a POSIXct to ensure the rows are sorted by date time.

The splitBy argument offers further control building SpatialLines. If in your DT, you have multiple temporal groups (e.g.: years) for example, you can provide the name of the column which identifies them and build SpatialLines for each individual in each year.

build_lines is used by group_lines for grouping overlapping lines created from relocations.

See also

group_lines

Other Build functions: build_polys()

Examples

# Load data.table
library(data.table)

# Read example data
DT <- fread(system.file("extdata", "DT.csv", package = "spatsoc"))

# Cast the character column to POSIXct
DT[, datetime := as.POSIXct(datetime, tz = 'UTC')]
#>        ID        X       Y            datetime population
#>     1:  A 715851.4 5505340 2016-11-01 00:00:54          1
#>     2:  A 715822.8 5505289 2016-11-01 02:01:22          1
#>     3:  A 715872.9 5505252 2016-11-01 04:01:24          1
#>     4:  A 715820.5 5505231 2016-11-01 06:01:05          1
#>     5:  A 715830.6 5505227 2016-11-01 08:01:11          1
#>    ---                                                   
#> 14293:  J 700616.5 5509069 2017-02-28 14:00:54          1
#> 14294:  J 700622.6 5509065 2017-02-28 16:00:11          1
#> 14295:  J 700657.5 5509277 2017-02-28 18:00:55          1
#> 14296:  J 700610.3 5509269 2017-02-28 20:00:48          1
#> 14297:  J 700744.0 5508782 2017-02-28 22:00:39          1

# EPSG code for example data
utm <- 'EPSG:32736'

# Build lines for each individual
lines <- build_lines(DT, projection = utm, id = 'ID', coords = c('X', 'Y'),
            sortBy = 'datetime')

# Build lines for each individual by year
DT[, yr := year(datetime)]
#>        ID        X       Y            datetime population   yr
#>     1:  A 715851.4 5505340 2016-11-01 00:00:54          1 2016
#>     2:  A 715822.8 5505289 2016-11-01 02:01:22          1 2016
#>     3:  A 715872.9 5505252 2016-11-01 04:01:24          1 2016
#>     4:  A 715820.5 5505231 2016-11-01 06:01:05          1 2016
#>     5:  A 715830.6 5505227 2016-11-01 08:01:11          1 2016
#>    ---                                                        
#> 14293:  J 700616.5 5509069 2017-02-28 14:00:54          1 2017
#> 14294:  J 700622.6 5509065 2017-02-28 16:00:11          1 2017
#> 14295:  J 700657.5 5509277 2017-02-28 18:00:55          1 2017
#> 14296:  J 700610.3 5509269 2017-02-28 20:00:48          1 2017
#> 14297:  J 700744.0 5508782 2017-02-28 22:00:39          1 2017
lines <- build_lines(DT, projection = utm, id = 'ID', coords = c('X', 'Y'),
            sortBy = 'datetime', splitBy = 'yr')