World Library  
Flag as Inappropriate
Email this Article

Haversine formula

Article Id: WHEBN0000590971
Reproduction Date:

Title: Haversine formula  
Author: World Heritage Encyclopedia
Language: English
Subject: Versine, Great-circle distance, List of trigonometry topics, Spherical trigonometry, Geolocation
Collection:
Publisher: World Heritage Encyclopedia
Publication
Date:
 

Haversine formula

The haversine formula is an equation important in navigation, giving great-circle distances between two points on a sphere from their longitudes and latitudes. It is a special case of a more general formula in spherical trigonometry, the law of haversines, relating the sides and angles of spherical triangles. The first table of haversines in English was published by James Andrew in 1805.[1] Florian Cajori credits an earlier use by Jose de Mendoza y Ríos in 1801[2] The term haversine was coined in 1835 by Prof. James Inman.[3]

These names follow from the fact that they are customarily written in terms of the haversine function, given by haversin(θ) = sin2(θ/2). 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.[4][5][6] These days, the haversine form is also convenient in that it has no coefficient in front of the sin2 function.

Contents

  • The haversine formula 1
  • The law of haversines 2
  • References 3
  • External links 4

The haversine formula

For any two points on a sphere, the haversine of the central angle between them is given by

\operatorname{haversin}\left(\frac{d}{r}\right) = \operatorname{haversin}(\phi_2 - \phi_1) + \cos(\phi_1) \cos(\phi_2)\operatorname{haversin}(\lambda_2-\lambda_1)

where

\operatorname{haversin}(\theta)=\sin^2\left(\frac{\theta}{2}\right)=\frac{1-\cos(\theta)}{2}
  • d is the distance between the two points (along a great circle of the sphere; see spherical distance),
  • r is the radius of the sphere,
  • \phi_1, \phi_2: latitude of point 1 and latitude of point 2
  • \lambda_1, \lambda_2: longitude of point 1 and longitude of point 2

On the left side of the equals sign d/r is the central angle, assuming angles are measured in radians (note that φ and λ can be converted from degrees to radians by multiplying by π/180 as usual).

Solve for d by applying the inverse haversine (if available) or by using the arcsine (inverse sine) function:

d = r \operatorname{haversin}^{-1}(h) = 2 r \arcsin\left(\sqrt{h}\right)

where h is haversin(d/r), or more explicitly:

d = 2 r \arcsin\left(\sqrt{\operatorname{haversin}(\phi_2 - \phi_1) + \cos(\phi_1) \cos(\phi_2)\operatorname{haversin}(\lambda_2-\lambda_1)}\right)
= 2 r \arcsin\left(\sqrt{\sin^2\left(\frac{\phi_2 - \phi_1}{2}\right) + \cos(\phi_1) \cos(\phi_2)\sin^2\left(\frac{\lambda_2 - \lambda_1}{2}\right)}\right)

When using these formulae, ensure that h does not exceed 1 due to a floating point error (d is only real for h from 0 to 1). h 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 d is then large (approaching πR, 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 = 1.)

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) you might end up with cos (d/R) = 0.99999999, 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" R 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 can't be guaranteed correct to better than 0.5%. 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 haversines

Given a unit sphere, a "triangle" on the surface of the sphere is defined by the great circles connecting three points u, v, and w on the sphere. If the lengths of these three sides are a (from u to v), b (from u to w), and c (from v to w), and the angle of the corner opposite c is C, then the law of haversines states:

(the law of haversines)
\operatorname{haversin}(c) = \operatorname{haversin}(a - b) + \sin(a) \sin(b) \, \operatorname{haversin}(C).

Since this is a unit sphere, the lengths a, b, and c 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 of the sphere).

Spherical triangle solved by the law of haversines.

In order to obtain the haversine formula of the previous section from this law, one simply considers the special case where u is the north pole, while v and w are the two points whose separation d is to be determined. In that case, a and b are π/2 − φ1,2 (i.e., 90° − latitude), C is the longitude separation Δλ, and c is the desired d/R. Noting that sin(π/2 − φ) = cos(φ), the haversine formula immediately follows.

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

(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 c when c is small. Instead, we substitute the identity that cos(θ) = 1 − 2 haversin(θ), and also employ the addition identity cos(a − b) = cos(a) cos(b) + sin(a) sin(b), to obtain the law of haversines, above.

References

  • 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).
  • Deriving the haversine formula, Ask Dr. Math (Apr. 20–21, 1999).
  • Romuald Ireneus 'Scibor-Marchocki, Spherical trigonometry, Elementary-Geometry Trigonometry web page (1997).
  • 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).
  1. ^ Heavenly Mathematics: The Forgotten Art of Spherical Trigonometry By Glen Van Brummelen
  2. ^ A History of Mathematical Notations: Vol. II By Florian Cajori
  3. ^ Oxford English Dictionary. Oxford University Press. 2nd ed. 1989. Cites coinage of term "Haversine" by Prof. Jas. Inman, D. D., in his Navigation and Nautical Astronomy, 3rd ed. (1835).
  4. ^ 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.
  5. ^ W. W. Sheppard and C. C. Soule, Practical navigation (World Technical Institute: Jersey City, 1922).
  6. ^ E. R. Hedrick, Logarithmic and Trigonometric Tables (Macmillan, New York, 1913).

External links

  • Implementations of the Haversine formula in 67 languages at rosettacode.org and in 17 languages on codecodex.com
  • Other implementations in C++, C (MacOS), Pascal, Python, Ruby, JavaScript, Matlab, MySQL
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 



Copyright © World Library Foundation. All rights reserved. eBooks from World eBook Library are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.