Buraya arama motoruyla gelen ve kutudan çıktığı gibi çalışan bir çözüm arayan insanlar (benim gibi) için kurmanızı tavsiye ederim mpu
. Haversine mesafesinipip install mpu --user
elde etmek için onu kurun ve şu şekilde kullanın :
import mpu
lat1 = 52.2296756
lon1 = 21.0122287
lat2 = 52.406374
lon2 = 16.9251681
dist = mpu.haversine_distance((lat1, lon1), (lat2, lon2))
print(dist)
Alternatif bir paket gpxpy
.
Bağımlılık istemiyorsanız şunları kullanabilirsiniz:
import math
def distance(origin, destination):
"""
Calculate the Haversine distance.
Parameters
----------
origin : tuple of float
(lat, long)
destination : tuple of float
(lat, long)
Returns
-------
distance_in_km : float
Examples
--------
>>> origin = (48.1372, 11.5756) # Munich
>>> destination = (52.5186, 13.4083) # Berlin
>>> round(distance(origin, destination), 1)
504.2
"""
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371
dlat = math.radians(lat2 - lat1)
dlon = math.radians(lon2 - lon1)
a = (math.sin(dlat / 2) * math.sin(dlat / 2) +
math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) *
math.sin(dlon / 2) * math.sin(dlon / 2))
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
d = radius * c
return d
if __name__ == '__main__':
import doctest
doctest.testmod()
Diğer alternatif paket ise [haversine][1]
from haversine import haversine, Unit
lyon = (45.7597, 4.8422)
paris = (48.8567, 2.3508)
haversine(lyon, paris)
>> 392.2172595594006
haversine(lyon, paris, unit=Unit.MILES)
>> 243.71201856934454
haversine(lyon, paris, unit='mi')
>> 243.71201856934454
haversine(lyon, paris, unit=Unit.NAUTICAL_MILES)
>> 211.78037755311516
İki vektördeki tüm noktalar arasındaki mesafeler için performans optimizasyonuna sahip olduklarını iddia ediyorlar
from haversine import haversine_vector, Unit
lyon = (45.7597, 4.8422)
paris = (48.8567, 2.3508)
new_york = (40.7033962, -74.2351462)
haversine_vector([lyon, lyon], [paris, new_york], Unit.KILOMETERS)
>> array([ 392.21725956, 6163.43638211])