stopFinder {stopdetection}R Documentation

Find an initial set of stops given timestamped locations

Description

stopFinder modifies by reference a data.table of trajectories, which are clustered spatiotemporally based on a user-provided distance radius parameter and time parameter. Points are evaluated sequentially to determine whether they meet the criteria for being a stop (at least thetaT time spent within thetaD distance of the initiating location). Points must therefore have a timestamp, longitude and latitude column.

Usage

stopFinder(traj, thetaD, thetaT)

Arguments

traj

An ordered data.table with columns named timestamp, longitude and latitude

thetaD

The distance parameter, represents a radius in meters for establishing how much area a stop can encompass.

thetaT

The time parameter, representing the length of time that must be spent within the stop area before being considered a stop.

Details

This function has been optimized for simulation studies where it will be called repeatedly. Because of this, all error-handling is done prior to this step. If calling this function directly, the user must ensure that the data are ordered based on the timestamp, and that the columns names are correct.

Value

traj is modified by reference to include a column stop_initiation_idx, which is NA for locations not belonging to a stop, and equal to the row number initiating the stop it belongs to otherwise.

Examples

# Set up data
library(data.table)
dt <- data.table(entity_id = rep(1, 27),
timestamp = c(1, 2, 4, 10, 14, 18, 20, 21, 24, 25, 28, 29, 45, 80, 100,
              120, 200, 270, 300, 340, 380, 450, 455, 460, 470, 475,
              490),
longitude = c(5.1299311, 5.129979, 5.129597, 5.130028, 5.130555, 5.131083,
              5.132101, 5.132704, 5.133326, 5.133904, 5.134746, 5.135613,
              5.135613, 5.135613, 5.135613, 5.135613, 5.135613, 5.135613,
              5.135613, 5.135613, 5.135613, 5.135613, 5.134746, 5.133904,
              5.133326, 5.132704, 5.132101),
latitude = c(52.092839, 52.092827, 52.092571, 52.092292, 52.092076, 52.091821,
             52.091420, 52.091219, 52.091343, 52.091651, 52.092138, 52.092698,
             52.092698, 52.092698, 52.092698, 52.092698, 52.092698, 52.092698,
             52.092698, 52.092698, 52.092698, 52.092138, 52.091651, 52.091343,
             52.091219, 52.091420, 52.091821))
stopFinder(dt, thetaD = 50, thetaT = 400)[]
plot(dt$longitude, dt$latitude, type = "b", lwd = dt$timedif, pch = 20,
 main = "Stay point detection from timestamped trajectory",
 sub = "Point size is elapsed time, points in red form a stop")
points(x = dt$longitude[dt$state == "stopped"],
 y = dt$latitude[dt$state == "stopped"],
 col = "red", lwd = dt$timedif[dt$state == "stopped"], pch = 20)


[Package stopdetection version 0.1.2 Index]