根据用户经纬度,sql计算距离并排序
时间:2021-07-01 10:21:17
帮助过:71人阅读
class DistanceUtil {
private static final double EARTH_RADIUS = 6378137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = s / 1000;
DecimalFormat df = new DecimalFormat("#.00");
s = Double.parseDouble(df.format(s));
return s;
}
public static void main(String[] args) {
double distance1 = getDistance(104.046115, 30.6030110000, 104.074666, 30.611842);
System.out.println("Distance is: " + distance1 + " km");
}
}
sql 查询
- SELECT
- es_name,
- es_lon,
- es_lat,
- ROUND(
- 6378.138 * 2 * ASIN(
- SQRT(
- POW(
- SIN(
- (
- 30.611842 * PI() / 180 - es_lat * PI() / 180
- ) / 2
- ),
-