I calculated the distance in meters between 2 points using 3 different libraries in Python (pyproj, geopy, and haversine). The results showed a major difference. How can I determine which result is more accurate?
Libraries versions:
- geopy==2.4.0
- pyproj==3.6.0
- shapely==2.0.1
Coordinates:
- Point_1 = (32.08018794644396, 34.766797643121166)
- Point_2 = (32.08270240179803, 34.76742074006736)
Results:
- haversine - 290.0 meters
- geopy - 284.96 meters
- pyproj - 240.34 meters
The code:
import geopy.distance
import pyproj
from haversine import haversine
from shapely.geometry import Point, LineString
def measure_distance_using_pyproj(first_point: Point, second_point: Point) -> float:
"""Source - https://pyproj4.github.io/pyproj/stable/api/geod.html#pyproj.Geod.geometry_length"""
line_between_points = LineString([first_point, second_point])
geod = pyproj.Geod(ellps="WGS84")
distance = geod.geometry_length(line_between_points)
return round(distance, 2)
def measure_distance_using_geopy(
first_coordinates: tuple[float, float],
second_coordinates: tuple[float, float]
) -> float:
"""Source - https://www.askpython.com/python/examples/find-distance-between-two-geo-locations"""
distance = geopy.distance.geodesic(first_coordinates, second_coordinates).meters
return round(distance, 2)
def measure_distance_using_haversine(
first_coordinates: tuple[float, float],
second_coordinates: tuple[float, float]
) -> float:
"""Source - https://www.section.io/engineering-education/using-geopy-to-calculate-the-distance-between-two-points"""
distance = haversine(first_coordinates, second_coordinates)
return round(distance, 2) * 1000 # convert km to meters
POINT_1_COORDINATES = (32.08018794644396, 34.766797643121166)
POINT_2_COORDINATES = (32.08270240179803, 34.76742074006736)
point_1_geometry = Point(POINT_1_COORDINATES)
point_2_geometry = Point(POINT_2_COORDINATES)
distance_by_haversine = measure_distance_using_haversine(POINT_1_COORDINATES, POINT_2_COORDINATES)
distance_by_geopy = measure_distance_using_geopy(POINT_1_COORDINATES, POINT_2_COORDINATES)
distance_by_pyproj = measure_distance_using_pyproj(point_1_geometry, point_2_geometry)
print(f'{distance_by_haversine=} meters')
print(f'{distance_by_geopy=} meters')
print(f'{distance_by_pyproj=} meters')
Thanks to all helpers