ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算经纬度两点间距离

2021-07-13 16:35:14  阅读:214  来源: 互联网

标签:lat1 经纬度 lat2 double 距离 180 两点 PI Math


 1         /**
 2         * 将角度转化为弧度
 3       */
 4         public static double radians(double d)
 5         {
 6             return d * Math.PI / 180.0;
 7         }
 8         /**
 9           * 根据两点经纬度坐标计算直线距离
10           * <p>
11           * S = 2arcsin√sin²(a/2)+cos(lat1)*cos(lat2)*sin²(b/2) ̄*6378.137
12           * <p>
13           * 1. lng1 lat1 表示A点经纬度,lng2 lat2 表示B点经纬度;<br>
14           * 2. a=lat1 – lat2 为两点纬度之差  b=lng1 -lng2 为两点经度之差;<br>
15           * 3. 6378.137为地球赤道半径,单位为千米;
16           *
17           * @param lng1 点1经度
18           * @param lat1 点1纬度
19           * @param lng2 点2经度
20           * @param lat2 点2纬度
21           * @return 距离,单位千米(KM)
22           * @see <a href="https://zh.wikipedia.org/wiki/%E5%8D%8A%E6%AD%A3%E7%9F%A2%E5%85%AC%E5%BC%8F">半正矢(Haversine)公式</a>
23           */
24         public static double getDistanceFrom2LngLat(double lng1, double lat1, double lng2, double lat2)
25         {
26             //将角度转化为弧度
27             double radLng1 = radians(lng1);
28             double radLat1 = radians(lat1);
29             double radLng2 = radians(lng2);
30             double radLat2 = radians(lat2);
31 
32             double a = radLat1 - radLat2;
33             double b = radLng1 - radLng2;
34 
35             return 2 * Math.Asin(Math.Sqrt(Math.Sin(a / 2) * Math.Sin(a / 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Sin (b / 2) * Math.Sin (b / 2))) * 6378.137;
36         }

 

 

 1 SELECT
 2     *,
 3     6378.138 * 2 * ASIN(
 4       SQRT(
 5         POW(
 6           SIN(
 7             (
 8               '.$lat.' * PI() / 180 - lat * PI() / 180
 9             ) / 2
10           ), 2
11         ) + COS('.$lat.' * PI() / 180) * COS(lat * PI() / 180) * POW(
12           SIN(
13             (
14               '.$lng.' * PI() / 180 - lng * PI() / 180
15             ) / 2
16           ), 2
17         )
18       )
19     ) *1000 AS distance
20 FROM
21     distance
22 ORDER BY
23     distance ASC

 

标签:lat1,经纬度,lat2,double,距离,180,两点,PI,Math
来源: https://www.cnblogs.com/googlegis/p/15006968.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有