獲取經緯度之間距離的Java工具類

碼頭工人 12年前發布 | 42K 次閱讀 Java Java開發

    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;  

}  </pre><br />
 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!