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