当前位置:Gxlcms > 数据库问题 > 根据用户经纬度,sql计算距离并排序

根据用户经纬度,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;  
  •     }  
  •   
  •     /** 
  •      * 根据两点间经纬度坐标(double值),计算两点间距离,单位:千米 
  •      * @author ershuai 
  •      * @param lng1 
  •      * @param lat1 
  •      * @param lng2 
  •      * @param lat2 
  •      * @return 
  •      */  
  •     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.04611530.6030110000104.07466630.611842);  
  •         System.out.println("Distance is: " + distance1 + " km");  
  •     }  
  • }  
  • 技术分享

     

    sql   查询

     

    1. SELECT  
    2.     es_name,  
    3.     es_lon,  
    4.     es_lat,  
    5.     ROUND(  
    6.         6378.138 * 2 * ASIN(  
    7.             SQRT(  
    8.                 POW(  
    9.                     SIN(  
    10.                         (  
    11.                             30.611842 * PI() / 180 - es_lat * PI() / 180  
    12.                         ) / 2  
    13.                     ),  

    人气教程排行