//工具类
package com.zy.golf.util;
//根据两个地点的经纬度,计算两地点的距离
public class CoordinateConvertUtil {
//地球赤道半径
private static final double EARTH_RADIUS = 6378.137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
//根据两个地点的经纬度,计算两地点的距离
public static double Distance(String nowLog, String nowLat, String longitude, String latitude) {
double long1;
double lat1;
double long2;
double lat2;
double a, b, sa2, sb2, d = 0;
try {
long1 = Double.valueOf(nowLog);
lat1 = Double.valueOf(nowLat);
long2 = Double.valueOf(longitude);
lat2 = Double.valueOf(latitude);
lat1 = rad(lat1);
lat2 = rad(lat2);
a = lat1 - lat2;
b = rad(long1 - long2);
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2 * EARTH_RADIUS
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
* Math.cos(lat2) * sb2 * sb2));
} catch (Exception e) {
e.printStackTrace();
}
return d;
}
}
==================使用
public Page<ZyGolfCourtInfoOut> queryRecentlyAddress(ZyGolfCourtInfoSearchIn in) {
String userLon = in.getLon();
String userLat = in.getLat();
Page<ZyGolfCourtInfoOut> page = getPageBeanBPI(in, ZyGolfCourtInfoOut.class);
page.setOpenSort(false);
List<ZyGolfCourtInfoOut> noPageListAll = zyGolfCourtInfoMapper.getPageList(in);
List<ZyGolfCourtInfoOut> noPageListY = new ArrayList<>();
List<ZyGolfCourtInfoOut> noPageListN = new ArrayList<>();
List<ZyGolfCourtInfoOut> noPageList = new ArrayList<>();
if (!CollectionUtils.isEmpty(noPageListAll)) {
for (int i = 0; i < noPageListAll.size(); i++) {
BigDecimal distance = new BigDecimal("0");
ZyGolfCourtInfoOut zyGolfCourtInfoOut = noPageListAll.get(i);
String courtLon = zyGolfCourtInfoOut.getLon();
String courtLat = zyGolfCourtInfoOut.getLat();
distance = BigDecimal.valueOf(CoordinateConvertUtil.Distance(userLon,userLat,courtLon,courtLat));
zyGolfCourtInfoOut.setAddressDouble(distance);
}
noPageList = noPageListAll.stream().sorted(Comparator.comparing(ZyGolfCourtInfoOut::getAddressDouble)).collect(Collectors.toList());
//分页
Integer totalNum = noPageList.size();
//默认从零分页,这里要考虑这种情况,下面要计算。
int pageNum = in.getPageNum() ;
int pageSize = in.getPageSize();
Integer totalPage = 0;
if (totalNum > 0) {
totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;
}
if (pageNum > totalPage) {
pageNum = totalPage;
}
int startPoint = (pageNum - 1) * pageSize;
int endPoint = startPoint + pageSize;
if (totalNum <= endPoint) {
endPoint = totalNum;
}
noPageList = noPageList.subList(startPoint, endPoint);
}
page.setRecords(noPageList);
page.setTotal(noPageListAll.size());
return page;
}