# Haversine formula to find distance between two points on a sphere

The Haversine formula calculates the shortest distance between two points on a sphere using their latitudes and longitudes measured along the surface. It is important for use in navigation. The haversine can be expressed in trignometric function as: The haversine of the central angle (which is d/r) is calculated by the following formula: where r is the radius of earth(6371 km), d is the distance between two points, is latitude of the two points and is longitude of the two points respectively.

Solving d by applying the inverse haversine or by using the inverse sine function, we get: or The distance between Big Ben in London (51.5007° N, 0.1246° W) and The Statue of Liberty in
New York (40.6892° N, 74.0445° W) is 5574.8 km. This is not the exact measurement because the
formula assumes that the Earth is a perfect sphere when in fact it is an oblate spheroid.

Below is the implementation of the above formulae:

## C++

 // C++ program for the haversine formula  // C++ program for the  // haversine formula  #include  #include  using namespace std;     static double haversine(double lat1, double lon1,                          double lat2, double lon2)      {          // distance between latitudes          // and longitudes          double dLat = (lat2 - lat1) *                        M_PI / 180.0;          double dLon = (lon2 - lon1) *                         M_PI / 180.0;             // convert to radians          lat1 = (lat1) * M_PI / 180.0;          lat2 = (lat2) * M_PI / 180.0;             // apply formulae          double a = pow(sin(dLat / 2), 2) +                      pow(sin(dLon / 2), 2) *                      cos(lat1) * cos(lat2);          double rad = 6371;          double c = 2 * asin(sqrt(a));          return rad * c;      }     // Driver code  int main()  {      double lat1 = 51.5007;      double lon1 = 0.1246;      double lat2 = 40.6892;      double lon2 = 74.0445;             cout << haversine(lat1, lon1,                        lat2, lon2) << " K.M.";      return 0;  }     // This code is contributed  // by Mahadev.

## Java

 // Java program for the haversine formula  public class Haversine {         static double haversine(double lat1, double lon1,                              double lat2, double lon2)      {          // distance between latitudes and longitudes          double dLat = Math.toRadians(lat2 - lat1);          double dLon = Math.toRadians(lon2 - lon1);             // convert to radians          lat1 = Math.toRadians(lat1);          lat2 = Math.toRadians(lat2);             // apply formulae          double a = Math.pow(Math.sin(dLat / 2), 2) +                      Math.pow(Math.sin(dLon / 2), 2) *                      Math.cos(lat1) *                      Math.cos(lat2);          double rad = 6371;          double c = 2 * Math.asin(Math.sqrt(a));          return rad * c;      }         // Driver Code      public static void main(String[] args)      {          double lat1 = 51.5007;          double lon1 = 0.1246;          double lat2 = 40.6892;          double lon2 = 74.0445;          System.out.println(haversine(lat1, lon1, lat2, lon2) + " K.M.");      }  }

## Python 3

 # Python 3 program for the   # haversine formula  import math     # Python 3 program for the  # haversine formula  def haversine(lat1, lon1, lat2, lon2):             # distance between latitudes      # and longitudes      dLat = (lat2 - lat1) * math.pi / 180.0     dLon = (lon2 - lon1) * math.pi / 180.0        # convert to radians      lat1 = (lat1) * math.pi / 180.0     lat2 = (lat2) * math.pi / 180.0        # apply formulae      a = (pow(math.sin(dLat / 2), 2) +           pow(math.sin(dLon / 2), 2) *               math.cos(lat1) * math.cos(lat2));      rad = 6371     c = 2 * math.asin(math.sqrt(a))      return rad * c     # Driver code  if __name__ == "__main__":      lat1 = 51.5007     lon1 = 0.1246     lat2 = 40.6892     lon2 = 74.0445            print(haversine(lat1, lon1,lat2, lon2), "K.M.")     # This code is contributed   # by ChitraNayal

## C#

 // C# program for the haversine formula  using System;  class GFG  {     static double haversine(double lat1, double lon1,                          double lat2, double lon2)  {      // distance between latitudes and longitudes      double dLat = (Math.PI / 180) * (lat2 - lat1);      double dLon = (Math.PI / 180) * (lon2 - lon1);         // convert to radians      lat1 = (Math.PI / 180) * (lat1);      lat2 = (Math.PI / 180) * (lat2);         // apply formulae      double a = Math.Pow(Math.Sin(dLat / 2), 2) +                  Math.Pow(Math.Sin(dLon / 2), 2) *                  Math.Cos(lat1) * Math.Cos(lat2);      double rad = 6371;      double c = 2 * Math.Asin(Math.Sqrt(a));      return rad * c;  }     // Driver Code  public static void Main()  {      double lat1 = 51.5007;      double lon1 = 0.1246;      double lat2 = 40.6892;      double lon2 = 74.0445;      Console.WriteLine(haversine(lat1, lon1,                                   lat2, lon2) + " K.M.");  }  }     // This code is contributed   // by Akanksha Rai(Abby_akku)

## PHP

 

Output:

5574.840456848555 K.M.


GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.