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
