获取经纬度之间距离的Java工具类

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

public class GeoUtil { 
   
    /**
     * 根据经纬度和距离返回一个矩形范围
     * 
     * @param lng
     *            经度
     * @param lat
     *            纬度
     * @param distance
     *            距离(单位为米)
     * @return [lng1,lat1, lng2,lat2] 矩形的左下角(lng1,lat1)和右上角(lng2,lat2)
     */ 
    public static double[] getRectangle(double lng, double lat, long distance) { 
        float delta = 111000; 
        if (lng != 0 && lat != 0) { 
            double lng1 = lng - distance 
                    / Math.abs(Math.cos(Math.toRadians(lat)) * delta); 
            double lng2 = lng + distance 
                    / Math.abs(Math.cos(Math.toRadians(lat)) * delta); 
            double lat1 = lat - (distance / delta); 
            double lat2 = lat + (distance / delta); 
            return new double[] { lng1, lat1, lng2, lat2 }; 
        } else { 
            // TODO ZHCH 等于0时的计算公式 
            double lng1 = lng - distance / delta; 
            double lng2 = lng + distance / delta; 
            double lat1 = lat - (distance / delta); 
            double lat2 = lat + (distance / delta); 
            return new double[] { lng1, lat1, lng2, lat2 }; 
        } 
    } 
   
    /**
     * 得到两点间的距离 米
     * 
     * @param lat1 第一点纬度
     * @param lng1 第一点经度
     * @param lat2 第二点纬度
     * @param lng2 第二点经度
     * @return
     */ 
    public static double getDistanceOfMeter(double lat1, double lng1, 
            double lat2, double lng2) { 
        double radLat1 = rad(lat1); 
        double radLat2 = rad(lat2); 
        double a = radLat1 - radLat2; 
        double b = rad(lng1) - rad(lng2); 
        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))); 
        s = s * EARTH_RADIUS; 
        s = Math.round(s * 10000) / 10; 
        return s; 
    } 
       
    private static double rad(double d) { 
        return d * Math.PI / 180.0; 
    } 
   
    /**
     * 地球半径:6378.137KM
     */ 
    private static double EARTH_RADIUS = 6378.137; 
   
}


转载于:https://my.oschina.net/ydsakyclguozi/blog/410505

你可能感兴趣的:(获取经纬度之间距离的Java工具类)