zoukankan      html  css  js  c++  java
  • 根据经纬度,计算距离

    private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)  
          
        /** 
         * 转化为弧度(rad) 
         * */  
        private static double rad(double d)  
        {  
           return d * Math.PI / 180.0;  
        }  
          
        /** 
         * 基于余弦定理求两经纬度距离 
         * @param lon1 第一点的精度 
         * @param lat1 第一点的纬度 
         * @param lon2 第二点的精度 
         * @param lat3 第二点的纬度 
         * @return 返回的距离,单位km 
         * */  
        public static double LantitudeLongitudeDist(double lon1, double lat1,double lon2, double lat2) {  
            double radLat1 = rad(lat1);  
            double radLat2 = rad(lat2);  
      
            double radLon1 = rad(lon1);  
            double radLon2 = rad(lon2);  
      
            if (radLat1 < 0)  
                radLat1 = Math.PI / 2 + Math.abs(radLat1);// south  
            if (radLat1 > 0)  
                radLat1 = Math.PI / 2 - Math.abs(radLat1);// north  
            if (radLon1 < 0)  
                radLon1 = Math.PI * 2 - Math.abs(radLon1);// west  
            if (radLat2 < 0)  
                radLat2 = Math.PI / 2 + Math.abs(radLat2);// south  
            if (radLat2 > 0)  
                radLat2 = Math.PI / 2 - Math.abs(radLat2);// north  
            if (radLon2 < 0)  
                radLon2 = Math.PI * 2 - Math.abs(radLon2);// west  
            double x1 = EARTH_RADIUS * Math.cos(radLon1) * Math.sin(radLat1);  
            double y1 = EARTH_RADIUS * Math.sin(radLon1) * Math.sin(radLat1);  
            double z1 = EARTH_RADIUS * Math.cos(radLat1);  
      
            double x2 = EARTH_RADIUS * Math.cos(radLon2) * Math.sin(radLat2);  
            double y2 = EARTH_RADIUS * Math.sin(radLon2) * Math.sin(radLat2);  
            double z2 = EARTH_RADIUS * Math.cos(radLat2);  
      
            double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)+ (z1 - z2) * (z1 - z2));  
            //余弦定理求夹角  
            double theta = Math.acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / (2 * EARTH_RADIUS * EARTH_RADIUS));  
            double dist = theta * EARTH_RADIUS;  
            return dist;  
        }
  • 相关阅读:
    vue证明题二,让vue跑起来
    vue证明题一,vue全家桶的构成
    Vue证明题
    layDay日期格式不合法报错解决
    【ASP.NET Core】运行原理(3):认证
    【ASP.NET Core】运行原理(2):启动WebHost
    【ASP.NET Core】运行原理(1):创建WebHost
    [Open Source] .NET 基于StackExchange.Redis的扩展
    [高并发]EntityFramework之高性能扩展
    [Tool] Git 使用 与 Git Flow
  • 原文地址:https://www.cnblogs.com/IWings/p/6372871.html
Copyright © 2011-2022 走看看