9 changed files with 213 additions and 61 deletions
@ -0,0 +1,48 @@ |
|||
package com.ccsens.util; |
|||
|
|||
import lombok.extern.slf4j.Slf4j; |
|||
|
|||
import java.math.BigDecimal; |
|||
|
|||
@Slf4j |
|||
public class DistanceUtil { |
|||
|
|||
private static double EARTH_RADIUS = 6378.137; |
|||
|
|||
private static BigDecimal rad(BigDecimal d) { |
|||
return d.multiply(new BigDecimal(Math.PI)).divide(new BigDecimal(180.0)); |
|||
} |
|||
|
|||
/** |
|||
* 通过经纬度获取距离(单位:米) |
|||
* |
|||
* @param lat1 |
|||
* @param lng1 |
|||
* @param lat2 |
|||
* @param lng2 |
|||
* @return |
|||
*/ |
|||
public static double getDistance(BigDecimal lat1, BigDecimal lng1, BigDecimal lat2, |
|||
BigDecimal lng2) { |
|||
log.info("坐标:{},{},{},{}", lat1, lng1, lat2, lng2); |
|||
BigDecimal radLat1 = rad(lat1); |
|||
BigDecimal radLat2 = rad(lat2); |
|||
BigDecimal a = radLat1.subtract(radLat2); |
|||
BigDecimal b = rad(lng1).subtract(rad(lng2)); |
|||
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a.divide(new BigDecimal(2)).doubleValue()), 2) + |
|||
Math.cos(radLat1.doubleValue()) * Math.cos(radLat2.doubleValue()) * Math.pow(Math.sin(b.divide(new BigDecimal(2)).doubleValue()), 2))); |
|||
s = s * EARTH_RADIUS; |
|||
s = Math.round(s * 10000d) / 10000d; |
|||
log.info("距离:{}", s); |
|||
return s; |
|||
} |
|||
|
|||
/** |
|||
* 判断一个点是否在圆形区域内 |
|||
*/ |
|||
public static boolean isInCircle(BigDecimal lng1, BigDecimal lat1, BigDecimal lng2, BigDecimal lat2, String radius) { |
|||
log.info("判断距离参数:{},{},{},{},{}", lat1, lng1, lat2, lng2,radius); |
|||
return getDistance(lat1, lng1, lat2, lng2) > Double.parseDouble(radius); |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue