On Thu, 14 Jan 2010 10:27:17 +0100 Karl Ove Hufthammer <k...@huftis.org> 
wrote:
> I have found three functions for calculating the distance between 
> geographical points, 'geo.dist' in the 'oce' package, 'rdist.earth' in 
> the 'fields' package, and 'spDistsN1' in the 'sp' package. They all give 
> slightly difference answers, so my question is: which of them is best, 
> i.e., gives the most accurate answer?

One simple test would be to calculate the circumference of the earth at 
the equator and the meridian. But this test gives conflicting answers.

According to Wikipedia, "http://en.wikipedia.org/wiki/Earth"; the 
equatorial circumference is 40075.02 km and the meridional circumference 
is 40007.86 km.

When calculating half the equatorial circumference, 'spDistsN1' is best, 
and gives the *exact* answer, while 'rdist.earth' is close (less than 
one km difference), and 'geo.dist' is far from the correct answer 
(133.92 km difference). So it would initially seem that 'spDistsN1' is 
the one to use, and one should avoid 'geo.dist'.

But when calculating the meridional distance, 'geo.dist' gives the exact 
answer, while both 'rdist.earth' and 'spDistsN1' are both off by about 
34 km (but in difference directions).

So which to use is still an open question ...

Here is the code I used:

library(oce)
library(fields)
library(sp)

# Equatorial
lt1=0
lt2=0
lg1=0
lg2=180

a=matrix(c(lg1,lt1),nrow=1)
b=matrix(c(lg2,lt2),nrow=1)

# Calculated distance
geod.dist(lt1,lg1,lt2,lg2)
rdist.earth(a,b, miles=FALSE)
spDistsN1(a,b, longlat=TRUE)

# Correct distance (according to Wikipedia)
40075.02/2


# Meridional
lt1=-90
lt2=90
lg1=0
lg2=0

a=matrix(c(lg1,lt1),nrow=1)
b=matrix(c(lg2,lt2),nrow=1)

# Calculated distance
geod.dist(lt1,lg1,lt2,lg2)
rdist.earth(a,b, miles=FALSE)
spDistsN1(a,b, longlat=TRUE)

# Correct distance (according to Wikipedia)
40007.86/2 

-- 
Karl Ove Hufthammer

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to