<p>对于那些通过搜索引擎来这里寻找解决方案的人(比如我),我建议安装<a href="https://github.com/MartinThoma/mpu" rel="noreferrer">^{<cd1>}</a>。通过<code>pip install mpu --user</code>安装它,并像这样使用它来获得<a href="https://en.wikipedia.org/wiki/Haversine_formula" rel="noreferrer">haversine distance</a>:</p>
<pre><code>import mpu
# Point one
lat1 = 52.2296756
lon1 = 21.0122287
# Point two
lat2 = 52.406374
lon2 = 16.9251681
# What you were looking for
dist = mpu.haversine_distance((lat1, lon1), (lat2, lon2))
print(dist) # gives 278.45817507541943.
</code></pre>
<p>另一个包是<a href="https://github.com/tkrajina/gpxpy" rel="noreferrer">^{<cd3>}</a>。</p>
<p>如果不需要依赖项,可以使用:</p>
<pre><code>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 # km
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()
</code></pre>