R/distRhumb.R In geosphere: Spherical Trigonometry

Documented in distRhumb

```# author of original JavaScript code: Chris Vennes
# (c) 2002-2009 Chris Veness
# http://www.movable-type.co.uk/scripts/latlong.html
# Licence: LGPL, without any warranty express or implied

# see http://www.edwilliams.org/avform.htm#Rhumb
# for the original formulae

# Port to R by Robert Hijmans
# October 2009
# version 0.1

distRhumb <- function(p1, p2, r=6378137) {
# distance on a rhumb line
if (missing(p2)) {
p2 <- p1[-1, ,drop=FALSE]
p1 <- p1[-nrow(p1), ,drop=FALSE]
} else {
}

p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r))
lon1 <- p[,1]
lat1 <- p[,2]
lon2 <- p[,3]
lat2 <- p[,4]
r <- p[,5]

dLat <- (lat2-lat1)
dLon <- abs(lon2-lon1)
dPhi <- log(tan(lat2/2 + pi/4)/tan(lat1/2 + pi/4))

i <- abs(dLat) > 1e-10
q <- vector(length=length(i))
q[i] <- dLat[i]/dPhi[i]
q[!i]  <- cos(lat1[!i])

#// if dLon over 180 degrees take shorter rhumb across 180 degrees meridian:
dLon[dLon > pi] <- 2*pi - dLon[dLon > pi]

d <- sqrt(dLat*dLat + q*q*dLon*dLon)
return(d * r)
}
```

Try the geosphere package in your browser

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

geosphere documentation built on May 26, 2019, 9:01 a.m.