这次开发的时候,老板让搜寻你周围xx米范围内的有我们公司坐标的产品,这里,我通过微信小程序获取到了gps,另外,我们产品也都有gps定位,怎么获得2点之间的距离,并通过sql查询出来,这里有个公式:
set @经度=117.116693;
set @纬度=39.095976;
set @longitude=117.116683;
set @latitude=39.095976;
select (ACOS(SIN((@纬度*3.1415)/180) * SIN((@latitude*3.1415)/180) + COS((@纬度*3.1415)/180) * COS((@latitude*3.1415)/180) * COS((@经度*3.1415)/180 - (@longitude*3.1415)/180))*6370996)
这里用的是mysql数据库,当纬度相同,经度在0.00001也就是第五位差1的时候,距离差0.86米左右,
当经度相同,纬度在第五位差1的时候,距离差1.1米左右.
通过上面的sql,将其作为条件放在where后,就可以检索出表内相关产品了,是不是很简单.
重点来了,产品少的话上面方法可行,多的话每条记录都要计算一次,那计算量太大了,
刚刚在群里讨论了下,如果需要检索的点很多,那这个方法不合适了,应该先过滤一次:
我这里用欧几里得公式:d=((x1-x2)^2+(y1-y2)^2)^(1/2)
,这里x是经度,y是纬度,这样可直接过滤:
就是说经纬度保留到小数点后第五位即可,
根据刚刚10万位差距,我这么算:
(((x1-x2)*100000)^2+((y1-y2)*100000)^2)^(1/2)
请大家指教
网友评论