我正在尝试编写一个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的转换功能,因为我认为我的格式已经是弧度。
答案 0 :(得分:2)
你无法检查“5米坐标”,因为相距5米的点的纬度/经度值的差异将根据球体表面上的位置而变化。
您可以尝试根据an existing script的值测试输出。拉拉特和拉斯以弧度存储是不常见的,我肯定会检查一下。
计算似乎没有任何不妥之处,但您可能意味着:
return km
在haversine
函数的末尾,以便print haversine(...)
实际执行有意义的操作。