import java.util.HashMap; import java.util.Map; public class DistanceUtil { public static Map<String, Double> getLngLat(double dis, double longitude, double latitude) { Map<String, Double> map = new HashMap<>(); //先计算查询点的经纬度范围 try { double r = 6371;//地球半径千米 double dlng = 2 * Math.asin(Math.sin(dis / (2 * r)) / Math.cos(latitude * Math.PI / 180)); dlng = dlng * 180 / Math.PI;//角度转为弧度 double dlat = dis / r; dlat = dlat * 180 / Math.PI; double minlat = latitude - dlat; double maxlat = latitude + dlat; double minlng = longitude - dlng; double maxlng = longitude + dlng; map.put("minlat", minlat); map.put("maxlat", maxlat); map.put("minlng", minlng); map.put("maxlng", maxlng); return map; } catch (Exception e) { e.printStackTrace(); } return map; } }
<select id="getRandSystemByLngLat" parameterType="map" resultMap="BaseResultMap"> select * from tz_teacher where `status` = 1 and reply_sts = 1 and is_system = 1 <if test="map.minlng != null and map.minlng != 0"> and lng <![CDATA[ >= ]]> #{map.minlng} </if> <if test="map.maxlng != null and map.maxlng != 0"> and lng <![CDATA[ <= ]]> #{map.maxlng} </if> <if test="map.minlat != null and map.minlat != 0"> and lat <![CDATA[ >= ]]> #{map.minlat} </if> <if test="map.maxlat != null and map.maxlat != 0"> and lat <![CDATA[ <= ]]> #{map.maxlat} </if> order by rand() limit 1 </select>
这个是把这几个经纬度的最大值和最小值,都计算出来,然后把这个当成查询条件,根据经纬度的坐标查询这个表。
来源:
https://blog.csdn.net/ab13137462255/article/details/118362395