两点之间的差异

时间:2013-11-10 16:09:34

标签: python latitude-longitude

我正在尝试编写一个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的转换功能,因为我认为我的格式已经是弧度。

1 个答案:

答案 0 :(得分:2)

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

您可以尝试根据an existing script的值测试输出。拉拉特和拉斯以弧度存储是不常见的,我肯定会检查一下。

计算似乎没有任何不妥之处,但您可能意味着:

return km

haversine函数的末尾,以便print haversine(...)实际执行有意义的操作。