面临相似的问题时,我只是将经度和纬度 向下取整 直到获得所需的“接近度”(以米为单位)。在我的情况下,将它们取到小数点后4位可以将位置分组,当它们大约相隔13米时。
如果经度或纬度为负数 - 将floor替换为ceil
首先向下(或向上)取整到所需的精度,然后按四舍五入的经度和纬度进行分组。
测量两个地理位置之间距离的代码来自获取基于纬度/经度的两个点之间的距离.
from math import sin, cos, sqrt, atan2, radians
R = 6373.0
lat1 = radians(48.71953)
lon1 = radians(-73.72882)
lat2 = radians(48.719)
lon2 = radians(-73.728)
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)*1000
print("Distance in meters:", round(distance))
距离为 84 米。
预期情况下,对于相同的角度,南部的距离较大,北部的距离较小。
对于相同的坐标,但在赤道上,距离为 109 米(将纬度修改为 0.71953 和 0.719)。
我修改了以下数字的位数,并始终在 Long 和 Lats 上单击一次,测量出的距离如下:
lat1 = radians(48.71953)
lon1 = radians(-73.72882)
lat2 = radians(48.71954)
lon2 = radians(-73.72883)
Distance in meters 1
lat1 = radians(48.7195)
lon1 = radians(-73.7288)
lat2 = radians(48.7196)
lon2 = radians(-73.7289)
Distance in meters 13
lat1 = radians(48.719)
lon1 = radians(-73.728)
lat2 = radians(48.720)
lon2 = radians(-73.729)
Distance in meters 133
lat1 = radians(48.71)
lon1 = radians(-73.72)
lat2 = radians(48.72)
lon2 = radians(-73.73)
Distance in meters 1333
摘要: 将经纬度保留4位小数并向上/向下取整,将有助于您对相距约13米的位置进行分组。
此数字取决于上述方程式:赤道附近较大,在北部较小。