zoukankan      html  css  js  c++  java
  • 根据用户经纬度,sql计算距离并排序

    根据经纬度计算距离

    1. public class DistanceUtil {  
    2.   
    3.     // 地球平均半径  
    4.     private static final double EARTH_RADIUS = 6378137;  
    5.   
    6.     // 把经纬度转为度(°)  
    7.     private static double rad(double d) {  
    8.         return d * Math.PI / 180.0;  
    9.     }  
    10.   
    11.     /** 
    12.      * 根据两点间经纬度坐标(double值),计算两点间距离,单位:千米 
    13.      * @author ershuai 
    14.      * @param lng1 
    15.      * @param lat1 
    16.      * @param lng2 
    17.      * @param lat2 
    18.      * @return 
    19.      */  
    20.     public static double getDistance(double lng1, double lat1, double lng2, double lat2) {  
    21.         double radLat1 = rad(lat1);  
    22.         double radLat2 = rad(lat2);  
    23.         double a = radLat1 - radLat2;  
    24.         double b = rad(lng1) - rad(lng2);  
    25.         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)));  
    26.         s = s * EARTH_RADIUS;  
    27.         s = s / 1000;  
    28.         DecimalFormat df = new DecimalFormat("#.00");  
    29.         s = Double.parseDouble(df.format(s));  
    30.         return s;  
    31.     }  
    32.       
    33.     public static void main(String[] args) {  
    34.         double distance1 = getDistance(104.04611530.6030110000104.07466630.611842);  
    35.         System.out.println("Distance is: " + distance1 + " km");  
    36.     }  
    37. }  

     

    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.                     ),  
    14.                     2  
    15.                 ) + COS(30.611842 * PI() / 180) * COS(es_lat * PI() / 180) * POW(  
    16.                     SIN(  
    17.                         (  
    18.                             104.074666 * PI() / 180 - es_lon * PI() / 180  
    19.                         ) / 2  
    20.                     ),  
    21.                     2  
    22.                 )  
    23.             )  
    24.         ) * 1000  
    25.     ) AS distance_um  
    26. FROM  
    27.     c_ershuai  
    28. ORDER BY  
    29.     distance_um ASC  

     

  • 相关阅读:
    Dos命令%date:~0,10%
    SharePoint显示错误信息
    VM打开虚拟机文件报错
    Sharepoint2013切换用户菜单
    批量创建域用户
    通过数据库恢复SharePoint网站
    SharePoint2013修复报错
    js 循环
    js 正则表达式
    阶乘函数
  • 原文地址:https://www.cnblogs.com/dcxmaozi/p/6921407.html
Copyright © 2011-2022 走看看