获取指定经纬度指定范围内随机坐标
public static Map<String,BigDecimal> generatrRandomGps(BigDecimal baseLog, BigDecimal baseLat, Integer radius, int scale){
BigDecimal divide = BigDecimal.valueOf(radius).multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(111300), 20, BigDecimal.ROUND_HALF_UP);
double radisuInDegrees = divide.doubleValue();
Random random = new Random();
double u = random.nextFloat();
double v = random.nextFloat();
double w = radisuInDegrees * Math.sqrt(u);
double t = 2 * Math.PI * v;
double x = w * Math.cos(t);
double y = w * Math.sin(t);
BigDecimal longitude = baseLog.add(BigDecimal.valueOf(y)).setScale(scale,BigDecimal.ROUND_HALF_UP);
BigDecimal latitude = baseLat.add(BigDecimal.valueOf(x)).setScale(scale,BigDecimal.ROUND_HALF_UP);
Map<String,BigDecimal> result = new HashMap<>();
result.put("longitude",longitude);
result.put("latitude",latitude);
return result;
}
public static double distance(double lngOne, double latOne, double lngTwo,
double latTwo) {
double a, b, R;
R = 6378137;
latOne = latOne * Math.PI / 180.0;
latTwo = latTwo * Math.PI / 180.0;
a = latOne - latTwo;
b = (lngOne - lngTwo) * Math.PI / 180.0;
double d;
double sa2, sb2;
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2
* R
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(latOne)
* Math.cos(latTwo) * sb2 * sb2));
return d;
}