0

我正在尝试编写一个 Python 函数来确定几个地理点是否在 5 米的距离内。我有几个坐标,例如:13.09073、-86.3560933 和 13.09237、-86.3576067。我尝试使用 Haversine 函数,但我不确定我得到了正确的值。

这是迄今为止的功能:

from math import sin, cos, pow, atan2, sqrt


def haversine(pos1, pos2):
    lat1 = float(pos1['lat'])
    long1 = float(pos1['long'])
    lat2 = float(pos2['lat'])
    long2 = float(pos2['long'])
    d_lat = (lat2 - lat1)
    d_long = (long2 - long1)

    a = pow(
        sin(d_lat / 2), 2) + cos(lat1) * cos(lat2) * pow(sin(d_long / 2), 2)
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    km = 6367 * c
    print 'km %f' % km
    print 'mts %f' % (km * 1000)


print haversine(
    {'lat': 0.0, 'long': 0.0}, {'lat': 0.0, 'long': 0.0000007852992})

这个奇怪的数字应该是“5米”的距离。我删除了 degree_to_rad 的转换功能,因为我认为我的格式已经在弧度上。

4

1 回答 1

2

您将无法检查“坐标中的 5 米”,因为相距 5m 的点的纬度/经度值的差异将根据球体表面上的位置而变化。

您可以尝试根据现有脚本中的值测试您的输出。lats 和 lons 以弧度存储并不常见,我肯定会检查一下。

计算似乎没有任何问题,但您可能的意思是:

return km

haversine函数的末尾,以便print haversine(...)实际做一些有意义的事情。

于 2013-11-10T17:19:19.843 回答