# 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.


Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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.