Java 最近一公里距离筛选

Java 最近一公里距离筛选 
1.先筛选经度,纬度一公里范围,对mysql计算一公里缩小范围
2.mysql 最近一公里筛选


/**
* @author zhaobin
* @Description 计算给定经纬度附近相应公里数的经纬度范围
* @param longitude 经度
* @param latitude 纬度
* @param distince 距离(千米)
* @return Map 格式:经度最小值-经度最大值-纬度最小值-纬度最大值
* @Data 2020.04.21
**/
public static Map getNearbyByLongitudeAndLatitudeAndDistince(BigDecimal longitude, BigDecimal latitude, Integer distince) {
// 此处为了mysql ST_Distance_Sphere函数地球半径保持一致
double r = 6371.000; // 地球半径千米
double lng = longitude.doubleValue();
double lat = latitude.doubleValue();
double dlng = 2 * Math.asin(Math.sin(distince / (2 * r)) / Math.cos(lat * Math.PI / 180));
dlng = dlng * 180 / Math.PI;// 角度转为弧度
double dlat = distince / r;
dlat = dlat * 180 / Math.PI;
double minlatNum = lat - dlat;
double maxlatNum = lat + dlat;
double minlngNum = lng - dlng;
double maxlngNum = lng + dlng;
Map resultMap = new HashMap<>(6);
resultMap.put(minlng,minlngNum);
resultMap.put(maxlng,maxlngNum);
resultMap.put(minlat,minlatNum);
resultMap.put(maxlat,maxlatNum);
return resultMap;
}

mysql计算 1公里
select * from table
where is_delete=0
AND lng BETWEEN #{minlng} AND #{maxlng}
AND lat BETWEEN #{minlat} AND #{maxlat}

AND ST_Distance_Sphere(point (lng , lat),point(#{lng},#{lat})) <=1000


你可能感兴趣的:(Mysql,java)