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
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')