Haversine formula

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Template:Short description The haversine formula determines the great-circle distance between two points on a sphere given their longitudes and latitudes. Important in navigation, it is a special case of a more general formula in spherical trigonometry, the law of haversines, that relates the sides and angles of spherical triangles.

The first table of haversines in English was published by James Andrew in 1805,[1] but Florian Cajori credits an earlier use by José de Mendoza y Ríos in 1801.[2][3] The term haversine was coined in 1835 by James Inman.[4][5]

These names follow from the fact that they are customarily written in terms of the haversine function, given by hav θ = sin2 Template:SfracθScript error: No such module "Check for unknown parameters".. The formulas could equally be written in terms of any multiple of the haversine, such as the older versine function (twice the haversine). Prior to the advent of computers, the elimination of division and multiplication by factors of two proved convenient enough that tables of haversine values and logarithms were included in 19th- and early 20th-century navigation and trigonometric texts.[6][7][8] These days, the haversine form is also convenient in that it has no coefficient in front of the sin2Script error: No such module "Check for unknown parameters". function.

File:Illustration of great-circle distance.svg
A diagram illustrating great-circle distance (drawn in red) between two points on a sphere, P and Q. Two antipodal points, u and v are also shown.

The formula is contrasted with spherical law of cosines, which is theoretically equivalent, however.

Formulation

The basic relation is shown by

d=rθ,

where

  • θScript error: No such module "Check for unknown parameters". is the central angle between any two points on a sphere,
  • dScript error: No such module "Check for unknown parameters". is the distance between the two points along a great circle of the sphere (see spherical distance),
  • rScript error: No such module "Check for unknown parameters". is the radius of the sphere.

The haversine formula allows the haversine of θScript error: No such module "Check for unknown parameters". to be computed directly from the latitude (represented by φScript error: No such module "Check for unknown parameters".) and longitude (represented by λScript error: No such module "Check for unknown parameters".) of the two points:

havθ=hav(Δφ)+cos(φ1)cos(φ2)hav(Δλ)

where

  • φ1Script error: No such module "Check for unknown parameters"., φ2Script error: No such module "Check for unknown parameters". are the latitude of point 1 and latitude of point 2,
  • λ1Script error: No such module "Check for unknown parameters"., λ2Script error: No such module "Check for unknown parameters". are the longitude of point 1 and longitude of point 2,
  • Δφ=φ2φ1, Δλ=λ2λ1.

The haversine function computes half a versine of the angle θScript error: No such module "Check for unknown parameters"., or the squares of half chord of the angle on a unit circle (sphere). It is related to other sinusoidal functions:

havθ=sin2(θ2)=1cos(θ)2.

To solve for θScript error: No such module "Check for unknown parameters". from the differences in latitude and longitude explicitly:

θ=2arcsin(havθ),

where havθ can be calculated by:

havθ=hav(Δφ)+cos(φ1)cos(φ2)hav(Δλ)=hav(Δφ)+(1hav(Δφ)hav(2φm))hav(Δλ)=sin2(Δφ2)+(1sin2(Δφ2)sin2(φm))sin2(Δλ2)=sin2(Δφ2)+cosφ1cosφ2sin2(Δλ2)=sin2(Δφ2)cos2(Δλ2)+cos2(φm)sin2(Δλ2)=1cos(Δφ)+cosφ1cosφ2(1cos(Δλ))2[9]

and φm=φ2+φ12.

When using these formulae, one must ensure that h = hav(θ)Script error: No such module "Check for unknown parameters". does not exceed 1 due to a floating point error (dScript error: No such module "Check for unknown parameters". is real only for 0 ≤ h ≤ 1Script error: No such module "Check for unknown parameters".). hScript error: No such module "Check for unknown parameters". only approaches 1 for antipodal points (on opposite sides of the sphere)—in this region, relatively large numerical errors tend to arise in the formula when finite precision is used. Because dScript error: No such module "Check for unknown parameters". is then large (approaching πRScript error: No such module "Check for unknown parameters"., half the circumference) a small error is often not a major concern in this unusual case (although there are other great-circle distance formulas that avoid this problem). (The formula above is sometimes written in terms of the arctangent function, but this suffers from similar numerical problems near h = 1Script error: No such module "Check for unknown parameters"..)

As described below, a similar formula can be written using cosines (sometimes called the spherical law of cosines, not to be confused with the law of cosines for plane geometry) instead of haversines, but if the two points are close together (e.g. a kilometer apart, on the Earth) one might end up with cos(Template:Sfrac) = 0.99999999Script error: No such module "Check for unknown parameters"., leading to an inaccurate answer. Since the haversine formula uses sines, it avoids that problem.

Either formula is only an approximation when applied to the Earth, which is not a perfect sphere: the "Earth radius" RScript error: No such module "Check for unknown parameters". varies from 6356.752 km at the poles to 6378.137 km at the equator. More importantly, the radius of curvature of a north-south line on the earth's surface is 1% greater at the poles (≈6399.594 km) than at the equator (≈6335.439 km)—so the haversine formula and law of cosines cannot be guaranteed correct to better than 0.5%.Script error: No such module "Unsubst". More accurate methods that consider the Earth's ellipticity are given by Vincenty's formulae and the other formulas in the geographical distance article.

The law of haversinesScript error: No such module "anchor".

File:Law-of-haversines.svg
Spherical triangle solved by the law of haversines

Given a unit sphere, a "triangle" on the surface of the sphere is defined by the great circles connecting three points uScript error: No such module "Check for unknown parameters"., vScript error: No such module "Check for unknown parameters"., and wScript error: No such module "Check for unknown parameters". on the sphere. If the lengths of these three sides are aScript error: No such module "Check for unknown parameters". (from uScript error: No such module "Check for unknown parameters". to vScript error: No such module "Check for unknown parameters".), bScript error: No such module "Check for unknown parameters". (from uScript error: No such module "Check for unknown parameters". to wScript error: No such module "Check for unknown parameters".), and cScript error: No such module "Check for unknown parameters". (from vScript error: No such module "Check for unknown parameters". to wScript error: No such module "Check for unknown parameters".), and the angle of the corner opposite cScript error: No such module "Check for unknown parameters". is CScript error: No such module "Check for unknown parameters"., then the law of haversines states:[10]

hav(c)=hav(ab)+sin(a)sin(b)hav(C).

Since this is a unit sphere, the lengths aScript error: No such module "Check for unknown parameters"., bScript error: No such module "Check for unknown parameters"., and cScript error: No such module "Check for unknown parameters". are simply equal to the angles (in radians) subtended by those sides from the center of the sphere (for a non-unit sphere, each of these arc lengths is equal to its central angle multiplied by the radius RScript error: No such module "Check for unknown parameters". of the sphere).

In order to obtain the haversine formula of the previous section from this law, one simply considers the special case where uScript error: No such module "Check for unknown parameters". is the north pole, while vScript error: No such module "Check for unknown parameters". and wScript error: No such module "Check for unknown parameters". are the two points whose separation dScript error: No such module "Check for unknown parameters". is to be determined. In that case, aScript error: No such module "Check for unknown parameters". and bScript error: No such module "Check for unknown parameters". are Template:Sfracφ1,2Script error: No such module "Check for unknown parameters". (that is, the, co-latitudes), CScript error: No such module "Check for unknown parameters". is the longitude separation λ2λ1Script error: No such module "Check for unknown parameters"., and cScript error: No such module "Check for unknown parameters". is the desired Template:SfracScript error: No such module "Check for unknown parameters".. Noting that sin(Template:Sfracφ) = cos(φ)Script error: No such module "Check for unknown parameters"., the haversine formula immediately follows.

To derive the law of haversines, one starts with the spherical law of cosines:

cos(c)=cos(a)cos(b)+sin(a)sin(b)cos(C).

As mentioned above, this formula is an ill-conditioned way of solving for cScript error: No such module "Check for unknown parameters". when cScript error: No such module "Check for unknown parameters". is small. Instead, we substitute the identity that cos(θ) = 1 − 2 hav(θ)Script error: No such module "Check for unknown parameters"., and also employ the addition identity cos(ab) = cos(a) cos(b) + sin(a) sin(b)Script error: No such module "Check for unknown parameters"., to obtain the law of haversines, above.

Proof

One can prove the formula:

hav(θ)=hav(Δφ)+cos(φ1)cos(φ2)hav(Δλ)

by transforming the points given by their latitude and longitude into cartesian coordinates, then taking their dot product.

Consider two points p𝟏,p𝟐 on the unit sphere, given by their latitude φ and longitude λ:

p𝟐=(λ2,φ2)p𝟏=(λ1,φ1)

These representations are very similar to spherical coordinates, however latitude is measured as angle from the equator and not the north pole. These points have the following representations in cartesian coordinates:

p𝟐=(cos(λ2)cos(φ2),sin(λ2)cos(φ2),sin(φ2))p𝟏=(cos(λ1)cos(φ1),sin(λ1)cos(φ1),sin(φ1))

From here we could directly attempt to calculate the dot product and proceed, however the formulas become significantly simpler when we consider the following fact: the distance between the two points will not change if we rotate the sphere along the z-axis. This will in effect add a constant to λ1,λ2. Note that similar considerations do not apply to transforming the latitudes - adding a constant to the latitudes may change the distance between the points. By choosing our constant to be λ1, and setting λ=Δλ, our new points become:

p𝟐=(cos(λ)cos(φ2),sin(λ)cos(φ2),sin(φ2))p𝟏=(cos(0)cos(φ1),sin(0)cos(φ1),sin(φ1))=(cos(φ1),0,sin(φ1))

With θ denoting the angle between p𝟏 and p𝟐, we now have that:

cos(θ)=p𝟏,p𝟐=p𝟏,p𝟐=cos(λ)cos(φ1)cos(φ2)+sin(φ1)sin(φ2)=sin(φ2)sin(φ1)+cos(φ2)cos(φ1)cos(φ2)cos(φ1)+cos(λ)cos(φ2)cos(φ1)=cos(Δφ)+cos(φ2)cos(φ1)(1+cos(λ))hav(θ)=hav(Δφ)+cos(φ2)cos(φ1)hav(λ)

Example

File:Geodesic from the White House to the Eiffel Tower.svg
A geodesic (red) connecting Washington, D.C. to Paris, plotted on the two-point equidistant projection, with geodesic circles (blue) at multiples of 1,000 km distance from Washington.

The haversine formula can be used to find the approximate distance between the White House in Washington, D.C. (latitude 38.898° N, longitude 77.037° W) and the Eiffel Tower in Paris (latitude 48.858° N, longitude 2.294° E). The difference in latitudes is Δφ=9.960° and the difference in longitudes is Δλ=79.331°. Inputting these into the haversine formula,

hav(θ)=hav(Δφ)+cos(φ1)cos(φ2)hav(Δλ)=hav(9.960)+cos(38.898)cos(48.858)hav(79.331)0.0075356+0.77827×0.65793×0.407430.21616θ55.411.

The great-circle distance is this central angle, in radians (55.411 degrees is 0.96710 radians), multiplied by the average radius of the Earth,

0.96710×6371.2 km6161.6 km.

By comparison, using a more accurate ellipsoidal model of the earth, the geodesic distance between these landmarks can be computed as approximately 6177.45 km.[11]

See also

References

  1. Script error: No such module "citation/CS1".
  2. Script error: No such module "citation/CS1".
  3. Script error: No such module "citation/CS1". (NB. ISBN and link for reprint of second edition by Cosimo, Inc., New York, 2013.)
  4. Script error: No such module "citation/CS1". (Fourth edition: [1].)
  5. Template:OED2
  6. H. B. Goodwin, The haversine in nautical astronomy, Naval Institute Proceedings, vol. 36, no. 3 (1910), pp. 735–746: Evidently if a Table of Haversines is employed we shall be saved in the first instance the trouble of dividing the sum of the logarithms by two, and in the second place of multiplying the angle taken from the tables by the same number. This is the special advantage of the form of table first introduced by Professor Inman, of the Portsmouth Royal Navy College, nearly a century ago.
  7. W. W. Sheppard and C. C. Soule, Practical navigation (World Technical Institute: Jersey City, 1922).
  8. E. R. Hedrick, Logarithmic and Trigonometric Tables (Macmillan, New York, 1913).
  9. Script error: No such module "Citation/CS1".
  10. Script error: No such module "citation/CS1".
  11. This calculation was made using the open-source geodesic calculation software GeographicLib, assuming the WGS84 ellipsoid. See Script error: No such module "Citation/CS1".

Further reading

  • U. S. Census Bureau Geographic Information Systems FAQ, (content has been moved to What is the best way to calculate the distance between 2 points?)
  • R. W. Sinnott, "Virtues of the Haversine", Sky and Telescope 68 (2), 159 (1984).
  • Script error: No such module "citation/CS1".
  • W. Gellert, S. Gottwald, M. Hellwich, H. Kästner, and H. Küstner, The VNR Concise Encyclopedia of Mathematics, 2nd ed., ch. 12 (Van Nostrand Reinhold: New York, 1989).

External links