关于知道2个经纬度计算距离的2个计算方法

 1     public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
 2         double radLat1 = rad(lat1);
 3         double radLat2 = rad(lat2);
 4         double a = radLat1 - radLat2;
 5         double b = rad(lng1) - rad(lng2);
 6         double s = 2 * Math.asin(Math.sqrt(
 7                 Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
 8         s = s * EARTH_RADIUS;
 9         s = Math.round(s * 10000d) / 10000d;
10         s = s * 1000;
11         return s;
12     }

这个方法在网上找到的,很多,相对是比较精确的。但是当我们只需要关心的是短距离的。那完全可以把地球看成是个近似平面。这个和我们平时在路上走的感觉一样。

地球是平的

有这个近似计算量就缩小了很多。

1 /**
2      * 近似算法,在短距离情况下,地球表面可以近似于平面,以三角计算法计算即可
3      * 与getDistance相比,此方法计算时间大概缩小100倍
4      * @return
5      */
6     public static double getDistanceSimple(double lat1, double lng1, double lat2, double lng2) {
7         double distance=Math.sqrt(Math.pow((lng1-lng2), 2)+Math.pow((lat1-lat2), 2));
8         return distance*110193;  // 1°对应的距离,大概11公里
9     }

 

1 public static void main(String [] args) {
2         long s=System.nanoTime();
3         Double d1=getDistance(30.245317899331223,120.17062046716632,30.249613375259734,120.17361255101852);
4         long e=System.nanoTime();
5         Double d2=getDistanceSimple(30.245317899331223,120.17062046716632,30.249613375259734,120.17361255101852);
6         long f=System.nanoTime();
7         System.out.println(d1.intValue()+" "+(e-s)*1.0/1000+"ns");
8         System.out.println(d2.intValue()+" "+(f-e)*1.0/1000+"ns");
9     }

 

558 172.849ns
576 1.921ns

 

距离差几米,计算时间差100倍左右

 

posted @ 2018-06-14 14:27  nanahome  阅读(844)  评论(0编辑  收藏  举报