擅长:python、mysql、java
<p><strong>编辑:</strong>作为一个注释,如果您只需要一个快速简便的方法来找到两点之间的距离,我强烈建议您使用下面<a href="https://stackoverflow.com/a/43211266/646543">Kurt's answer</a>中描述的方法,而不是重新实现Haversine——请参阅他的文章以了解其基本原理。</p>
<p>这个答案集中在回答操作遇到的特定错误上。</p>
<hr/>
<p>这是因为在Python中,所有的trig函数都是<a href="http://docs.python.org/3/library/math.html#trigonometric-functions" rel="noreferrer">use radians</a>,而不是度。</p>
<p>您可以手动将数字转换为弧度,也可以使用数学模块中的<a href="http://docs.python.org/3/library/math.html#math.radians" rel="noreferrer">^{<cd1>}</a>函数:</p>
<pre><code>from math import sin, cos, sqrt, atan2, radians
# approximate radius of earth in km
R = 6373.0
lat1 = radians(52.2296756)
lon1 = radians(21.0122287)
lat2 = radians(52.406374)
lon2 = radians(16.9251681)
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
print("Result:", distance)
print("Should be:", 278.546, "km")
</code></pre>
<p>距离现在返回正确值<code>278.545589351</code>km。</p>