淘宝网网站建设,外包公司排行,免费做封面的网站,检测网站是否被挂黑链文章目录 1、坐标计算2、优化 现在有一个需求#xff0c;就是找出距离某用户最近的一些点#xff0c;一种实现方法就是调用地图的api来计算筛选#xff0c;另外一种就是在数据库中计算#xff0c;考虑到地图api有并发量限制#xff0c;所以选用数据库计算的方式。 1、坐标… 文章目录 1、坐标计算2、优化 现在有一个需求就是找出距离某用户最近的一些点一种实现方法就是调用地图的api来计算筛选另外一种就是在数据库中计算考虑到地图api有并发量限制所以选用数据库计算的方式。 1、坐标计算
在MySQL中计算坐标点距离mysql5.6 提供了st_distance函数mysql5.7及以上提供了 st_distance_sphere 函数可以直接查询两个经纬度之间相距多少米。
st_distance_sphere 函数的计算结果要比 st_distance 函数结果更精确。
现数据库表中数据如下 例计算出坐标点102.683894, 25.038415与表中所有坐标的距离。
select latitude,longitude,TRUNCATE(st_distance_sphere(point(102.683894, 25.038415),point(longitude,latitude)),2) as distance
from h_info_coordinate
where state1
ORDER BY distance;这里用 TRUNCATE(x,2保留了两位小数距离单位米结果如下 如果要筛选3000米以内则这样写
select latitude,longitude,TRUNCATE(st_distance_sphere(point(102.683894, 25.038415),point(longitude,latitude)),2) as distance
from h_info_coordinate
where state1
HAVING distance 0 and distance 3000
ORDER BY distance;2、优化
上面对于一般的计算量来说没什么问题但是当数据量达到一定量级以后效率就会下降对于这种情况我们其实可以预先在坐标上下功夫减少不必要的计算因为实际开发中最大的应用场景是找出一定范围内的点。
我们首先来看经纬度经度划分为360度纬度划分为180度。 1度纬度之间的距离是多少公里
纬度是平行的因此理论上不管在地球哪个地方1度纬度的距离都是固定的不变的。然而地球的是略呈椭圆形当我们从赤道到北极和南极时度数之间产生微小的变化。 在赤道1度纬度的距离为110.567公里在南北极点1度纬度的距离为111.699公里。
所以我们可以看做是1度纬度为111公里。 1度经度之间的距离是多少公里
与纬度不同经度之间的距离因你在地球上的位置而异。因为地球是个球体所以肯定赤道相距最远两极会聚成一点。
在两极极点地区1度经度之间的距离为0它们已经变成了一个点在北纬40度或南纬40度处1度经度之间的距离为85公里赤道最长为111.321公里 综上所述我们可以大致筛选我们需要计算的坐标纬度一度111公里而经度看所处地区也可以直接按最大值111公里来筛选所以比如我们要计算50公里范围内的坐标则经纬度可以上下浮动大致0.5度实际度数50/1110.45如下
select latitude,longitude,TRUNCATE(st_distance_sphere(point(102.683894, 25.038415),point(longitude,latitude)),2) as distance
from h_info_coordinate
where state1
and latitude 25.038415 - 0.5
and latitude 25.038415 0.5
and longitude 102.683894 - 0.5
and longitude 102.683894 0.5
ORDER BY distance;这样需要计算的坐标变少了效率自然提高了。 更多技术干货请持续关注程序员大佬超。 原创不易转载请注明出处。