这两天需要在公众号上面做一个关于根据地图当前定位与目标地址直线距离远近推荐的查询,一开始摸不着头脑,现已解决,mark一下
现有的材料:当前用户手机端的通过微信定位的经纬度坐标、数据表中保存有场地的定位坐标、微信端传过来的一个距离范围值
一开始的思路:
1、程序代码通过当前定位和范围计算出符合条件的经纬度区间
2、sql语句里面直接计算记录里面的直线距离作为筛选条件
3、查出当前所有场地的记录,然后一条条匹配计算直线距离(最粗暴的方法)
本来是最倾向第一种方案的,但是仔细想过之后,觉得这是个圆形范围,直接计算出来经纬度区间然后去数据库匹配的话也不太可能(算法渣渣)
第二种的话貌似也不容易,这个sql语句也太难搞了,而且查了网上的资料有类似的,但是可读性太差了
本来想着上面两种方案都不行的话,只能第三种暴力处理
但是在网上查资料的过程中又看到一种类似第一种方案的的方法:
1、先根据当前定位和距离范围值计算出这个圆形范围的最大经纬度,这样就得出了这个圆的切线正方形;
2、再根据这个经纬度区间将符合条件的记录查询出来(包含有小部分直线距离不符合要求的记录);
3、将查询出来的结果与定位坐标逐一计算直线距离值,剔除超出距离范围的记录
4、将结果集排序,完成!
代码实现:
计算经纬度区间:
//进行范围搜索,先按照圆切先正方形查找大概范围,再逐一计算排序
if (space.getLongitude()!=null && space.getLatitude() != null && space.getDistance()!=null){
String[] split=MapCountUtil.getNearbyByLongitudeAndLatitudeAndDistance(
BigDecimal.valueOf(space.getLongitude())

本文介绍了如何在Java中根据地图定位坐标,结合微信定位的经纬度,实现查询并推荐一定范围内目标地址的方法。首先尝试了通过计算经纬度区间筛选,但由于算法复杂性放弃。最终采用先计算圆的切线正方形,筛选出大致范围内的记录,再逐个计算直线距离并排序的方式实现。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



