swh:1:snp:a4c99a50dc49f82b591f268001b320f8c3ca0041
Tip revision: dc000f2a5f006d137f66716b086025d618bf8306 authored by John M Chambers on 14 July 2008, 00:00:00 UTC
version 1.0-5
version 1.0-5
Tip revision: dc000f2
geoDist.R
"geoDist" <-
function(lat1, lon1, lat2, lon2, NAOK = TRUE, DUP = TRUE) {
n <- unique(c(length(lat1), length(lon1), length(lat2),
length(lon2)))
nok <- n
if(length(n)>1)
stop("Need all arguments of the same length: got ",
paste(n, collapse=", "))
if(n < 1)
return(numeric())
nas <- is.na(lat1) | is.na(lat2) | is.na(lon1) | is.na(lon2)
if(NAOK) {
if(any(nas)) {
ok <- !nas
lat1 <- lat1[ok]; lon1 <- lon1[ok];
lat2 <- lat2[ok]; lon2 <- lon2[ok];
nok <- sum(ok)
}
}
else if(any(nas))
stop("NA values found but not allowed")
res <- .Fortran("GEODISTV",
as.double(lat1),as.double(lon1),
as.double(lat2),as.double(lon2),
dist = double(nok), as.integer(nok),
DUP = DUP, PACKAGE = "SoDA")$dist
if(NAOK && any(nas)) {
value <- rep(NA, n)
value[ok] <- res
value
}
else
res
}