Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

python

How to calculate distance using the haversine formula

abhilash

Overview

The haversine formula calculates the shortest distance between two points, whose latitudes and longitudes are known, in a sphere. When used for points on the Earth, the calculated distance is approximate as the formula assumes the Earth to be a perfect sphere.

The haversine formula can be expressed as follows:

The central angle haversine can be computed as follows:

The values in the formula above stand for the following:

  • lat2lat_2 and lat1lat_1 are the latitudes of the two points.
  • long2long_2 and long1long_1 are the longitudes of the two points.
  • dd is the distance between the two coordinates.
  • rr is the radius of the earth, that is, 6,371 kilometers.

We can derive the haversine formula to calculate the distance d between two points as follows:

a = sin²(Δlat/2) + cos(lat1).cos(lt2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c

In the formula above, the values are calculated as follows:

  • Δlat = lat1 − lat2
  • Δlong = long1 − long2
  • R is the radius of the earth, that is, 6,371 kilometers.

Code


import math

def haversine_distance(coord1: tuple, coord2: tuple):
    lon1, lat1 = coord1
    lon2, lat2 = coord2

    R = 6371000
    phi_1 = math.radians(lat1)
    phi_2 = math.radians(lat2)

    delta_phi = math.radians(lat2 - lat1)
    delta_lambda = math.radians(lon2 - lon1)

    a = math.sin(delta_phi / 2.0) ** 2 + math.cos(phi_1) * math.cos(phi_2) * math.sin(delta_lambda / 2.0) ** 2
    
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))

    meters = R * c 
    km = meters / 1000.0

    meters = round(meters, 3)
    km = round(km, 3)
    miles = km * 0.621371
    print(f"Distance: {meters} m")
    print(f"Distance: {km} km")
    print(f"Distance: {miles} miles")
 

if __name__ == "__main__":
    lat1 = 43.2341
    lon1 = 0.5463
    lat2 = 58.1234
    lon2 = 88.9421
    
    coord1 = (lat1, lon1)
    coord2 = (lat2, lon2)
    print("Distance between", coord1, "and" , coord2, ":")
    haversine_distance(coord1, coord2)

Explanation

  • Line 8: We define the radius of the earth.
  • Lines 9-10: The latitude values are converted to radians.
  • Line 12: The difference between the latitudes is calculated.
  • Line 13: The difference between the longitudes is calculated.
  • Lines 15, 17, 19: The formula in the overview section is implemented to get the distance in meters.
  • Line 20: The distance is calculated in kilometers.
  • Line 22, 23: The distances are rounded to 3 decimal points.
  • Line 24: The distance is calculated in miles.
  • Lines 25-27: The distance in different units is printed.
  • Lines 31-37: The coordinates are defined.
  • Line 39: haversine_distance() method is invoked to find the haversine distance.

RELATED TAGS

python
RELATED COURSES

View all Courses

Keep Exploring