zoukankan      html  css  js  c++  java
  • 关于知道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倍左右

  • 相关阅读:
    C# DateTime
    C# const static readonly
    HTML div+CSS
    javaScript 正则表达式验证
    前期绑定和后期绑定
    如何应对大数据量高并发访问问题
    数据库优化之:SQL语句优化之二
    银河系漫游指南 图标
    [转] 花3分钟时间来关闭你电脑上没用的服务
    Devdays 2006 China 微软开发者日
  • 原文地址:https://www.cnblogs.com/nanahome/p/9182845.html
Copyright © 2011-2022 走看看