# R/distSpeed.R In diveMove: Dive analysis and calibration

## \$Id: distSpeed.R 578 2013-03-29 05:43:43Z sluque \$

"distSpeed" <- function(pt1, pt2, method=c("Meeus", "VincentyEllipsoid"))
{
## Value: A 3-column matrix with distance, time elapsed and speed
## between two points or set of points.
## --------------------------------------------------------------------
## Arguments: pt1 and pt2=matrices for each point, with three columns;
## the first for a POSIXct object with time for each point, the second
## for longitude, and the third for latitude.  method=character; which
## of the distance algorithms from geosphere package to use (only
## default parameters used).
## --------------------------------------------------------------------
## Author: Sebastian Luque
## --------------------------------------------------------------------
if (nrow(pt1) != nrow(pt2)) {
stop("pt1 and pt2 must have the same number of rows")
} else if (ncol(pt1) != 3 || ncol(pt2) != 3) {
stop("pt1 and pt2 must both have 3 columns")
} else if (nrow(pt1) < 1 || ncol(pt2) < 1) {
stop("pt1 and pt2 must each have at least 1 row")
}
method <- match.arg(method)
switch(method,
Meeus = {
distance <- geosphere::distMeeus(pt1[, 2:3], pt2[, 2:3])
},
VincentyEllipsoid = {
distance <- geosphere::distVincentyEllipsoid(pt1[, 2:3],
pt2[, 2:3])
})
pt1[, 1] <- as.numeric(pt1[, 1])
pt2[, 1] <- as.numeric(pt2[, 1])
## Distance (in Km)
distance <- distance / 1000
## Calculate time difference (in seconds) between locations.
timdiff <- abs(pt1[, 1] - pt2[, 1])
## Speed in m/s.
speed <- ifelse(timdiff == 0, 0, (distance * 1000) / timdiff)
cbind(distance, time.elapsed=timdiff, speed)
}

## Try the diveMove package in your browser

Any scripts or data that you put into this service are public.

diveMove documentation built on May 2, 2019, 4:47 p.m.