linhw 2024-05-15 18:23:31 +08:00
parent 9d0e9a952b
commit 02b803730c
2 changed files with 22 additions and 12 deletions

View File

@ -66,7 +66,7 @@ public class AppCircleVo implements Serializable {
private Integer isAdmin; private Integer isAdmin;
@ApiModelProperty(value = "距离") @ApiModelProperty(value = "距离")
private String distance; private Integer distance;
@ApiModelProperty(value = "途经位置经纬度列表") @ApiModelProperty(value = "途经位置经纬度列表")
private List<AppCircleAddress> addressVoList; private List<AppCircleAddress> addressVoList;

View File

@ -151,6 +151,7 @@ public class AppCircleServiceImpl implements IAppCircleService {
PageHelper.startPage(pageSize, limit); PageHelper.startPage(pageSize, limit);
PageInfo<AppCircleVo> page = new PageInfo(appCircleMapper.recommendCircleList(appCircle)); PageInfo<AppCircleVo> page = new PageInfo(appCircleMapper.recommendCircleList(appCircle));
List<AppCircleVo> list = page.getList(); List<AppCircleVo> list = page.getList();
List<AppCircleVo> appCircleVos = new ArrayList<>();
for (AppCircleVo circle : list) { for (AppCircleVo circle : list) {
// 计算位置 // 计算位置
if (circle.getType() == 3) { if (circle.getType() == 3) {
@ -164,29 +165,38 @@ public class AppCircleServiceImpl implements IAppCircleService {
); );
circle.setAddressVoList(appCircleAddresses); circle.setAddressVoList(appCircleAddresses);
} }
if (circle.getDistance() <= 5000) {
appCircleVos.add(circle);
} }
} }
}
if (appCircle.getType() == 3) {
page.setList(appCircleVos);
} else {
page.setList(list); page.setList(list);
}
return page; return page;
} }
private static final double EARTH_RADIUS = 6371000; // 地球半径,单位米 private static final double EARTH_RADIUS = 6371000; // 地球半径,单位米
public static String calculateDistance(double lat1, double lon1, double lat2, double lon2) { public static Integer calculateDistance(double lat1, double lon1, double lat2, double lon2) {
double latDistance = toRadians(lat2 - lat1); double phi1 = Math.toRadians(lat1);
double lonDistance = toRadians(lon2 - lon2); double phi2 = Math.toRadians(lat2);
double a = sin(latDistance / 2) * sin(latDistance / 2) + double deltaPhi = Math.toRadians(lat2 - lat1);
cos(toRadians(lat1)) * cos(toRadians(lat2)) * double deltaLambda = Math.toRadians(lon2 - lon1);
sin(lonDistance / 2) * sin(lonDistance / 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a)); double a = Math.sin(deltaPhi / 2) * Math.sin(deltaPhi / 2) +
Math.cos(phi1) * Math.cos(phi2) *
Math.sin(deltaLambda / 2) * Math.sin(deltaLambda / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
String d = (EARTH_RADIUS * c) + ""; String d = (EARTH_RADIUS * c) + "";
d = d.substring(0,d.indexOf(".")); return Integer.valueOf(d.substring(0,d.indexOf(".")));
return d;
} }
public static void main(String[] args) { public static void main(String[] args) {
// 示例计算从当前地址纬度40.7128,经度-74.0060)到另一个地址的距离 // 示例计算从当前地址纬度40.7128,经度-74.0060)到另一个地址的距离
String distance = calculateDistance(31.191648 Integer distance = calculateDistance(31.191648
, 121.313248, 31.183105 , 121.313248, 31.183105
, 121.263785); , 121.263785);
System.out.println("距离: " + distance + " 米"); System.out.println("距离: " + distance + " 米");