PBSmapping (version 2.72.1)

calcGCdist: Calculate Great-Circle Distance

Description

Calculate the great-circle distance between geographic (LL) coordinates. Also calculate the initial bearing of the great-circle arc (at its starting point).

Usage

calcGCdist(lon1, lat1, lon2, lat2, R=6371.2)

Arguments

lon1

Longitude coordinate (degrees) of the start point.

lat1

Latitude coordinate(degrees) of the start point.

lon2

Longitude coordinate(degrees) of the end point.

lat2

Latitude coordinate(degrees) of the end point.

R

Mean radius (km) of the Earth.

Value

A list obect containing: a -- Haversine \(a\) = square of half the chord length between the points, c -- Haversine \(c\) = angular distance in radians, d -- Haversine \(d\) = great-circle distance (km) between two points, d2 -- Law of Cosines \(d\) = great-circle distance (km) between two points, theta -- Initial bearing \(\theta\) (degrees) for the start point.

Details

The great-circle distance is calculated between two points along a spherical surface using the shortest distance and disregarding topography.

Method 1: Haversine Formula $$a = \sin^2((\phi_2 - \phi_1)/2) + \cos(\phi_1) \cos(\phi_2) \sin^2((\lambda_2 - \lambda_1)/2)$$ $$c = 2~\mathrm{atan2}(\sqrt{a}, \sqrt{1-a})$$ $$d = R c$$

where \(\phi\) = latitude (in radians), \(\lambda\) = longitude (in radians), \(R\) = radius (km) of the Earth, \(a\) = square of half the chord length between the points, \(c\) = angular distance in radians, \(d\) = great-circle distance (km) between two points.

Method 2: Spherical Law of Cosines $$d = \mathrm{acos}(\sin(\phi_1)\sin(\phi_2) + \cos(\phi_1)\cos(\phi_2)\cos(\lambda_2 - \lambda_1)) R$$

The initial bearing (aka forward azimuth) for the start point can be calculated using:

$$\theta = \mathrm{atan2}(\sin(\lambda_2-\lambda_1)\cos(\phi_2), \cos(\phi_1)\sin(\phi_2) - \sin(\phi_1)\cos(\phi_2)\cos(\lambda_2-\lambda_1))$$

References

http://www.movable-type.co.uk/scripts/latlong.html

See Also

addCompass, calcArea, calcCentroid, calcLength

Examples

Run this code
# NOT RUN {
local(envir=.PBSmapEnv,expr={
  #-- Distance between southern BC waters and north geomagnetic pole
  print(calcGCdist(-126.5,48.6,-72.7,80.4))
})
# }

Run the code above in your browser using DataLab