Skip to content
Prev 958 / 29559 Next

earth distance between points

Thanks Roger.

trackDistance <-
function (track, longlat = FALSE)
{
    if (!is.matrix(track))
        stop("track must be two-column matrix")
    if (ncol(track) != 2)
        stop("track must be two-column matrix")
    n1 <- nrow(track) - 1
    if (n1 < 2)
        stop("less than two points")
    res <- numeric(n1)
    for (i in seq(along = res))
      res[i] <- spDistsN1(track[i,,drop = FALSE],
                          track[(i + 1),,drop = FALSE ], longlat = longlat)
    res
}


ll <- matrix(c(5, 6, 60, 60), ncol=2)
      km <- spDistsN1(ll, ll[1,], longlat=TRUE)
      zapsmall(km)

ll.trk <- matrix(c(5, 6, 8, 8,  60, 60, 60,  60), ncol=2)
km.trk <- trackDistance(ll.trk, longlat = TRUE)
zapsmall(km.trk)
On Wed, 19 Apr 2006, Michael Sumner wrote:

            
Have a look inside the existing function and *apply or loop over the marix 
rows for .C("sp_dists", ...). There is a similar approach to azimuths in 
the latest maptools (trackAzimuth()). Yes, the current solution is 
specific, and was an attempt to centralise GreatCircle compiled code. 
However, so far R packages cannot be compiled against each others' shared 
libraries, so inter-package calls need to be at the R level, or force code 
copying (which isn't a big problem, but is not good practice for 
maintenance).

Roge