public Result campusQueryByLatAndLng(double lng1, double lat1,Double temp) {
// 计算2.5km内 0.048=500m
if (temp == null) {
temp = 0.024;
}
// 0.012246 0.01125
// 0.0225 0.0225
// 0.0192
List<CampusQueryPo> campusQueryPos = campusQueryMapper.campusQueryByLatAndLng(lng1, lat1, temp,temp);
List<CampusQueryVo> campusQueryVoList = new ArrayList<>();
for (CampusQueryPo campusQueryPo : campusQueryPos) {
Double distance = getDistance(campusQueryPo.getLongitude(), campusQueryPo.getLatitude(), lng1, lat1);
String stance = String.format("%.2fm", distance);
if (distance > 1000) {
stance = String.format("%.2fkm", distance / 1000.0);
}
CampusQueryVo campusQueryVo = CampusQueryVo.builder()
.address(campusQueryPo.getAddress())
.camName(campusQueryPo.getCamName())
.distance(stance)
.subway(campusQueryPo.getSubway())
.properties(campusQueryPo.getProperties())
.region(campusQueryPo.getRegion())
.build();
campusQueryVoList.add(campusQueryVo);
}
System.out.println("一共" + campusQueryPos.size() + "条数据");
return ResultUtil.SUCCESS(campusQueryVoList);
}
private double getDistance(double lng1, double lat1, double lng2, double lat2) {
double PI = 3.14159265358979323; // 圆周率
double R = 6371229; // 地球的半径
double x, y, distance;
x = (lng2 - lng1) * PI * R
* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
y = (lat2 - lat1) * PI * R / 180;
distance = Math.hypot(x, y);
return distance;
}
SELECT * from campus_query " +
" where (latitude between #{lat1}-#{tempLat} and #{lat1}+#{tempLat}) and (longitude between #{lng1}-#{tempLng} and #{lng1}+#{tempLng})
参考文章:https://www.jianshu.com/p/678b19c21364