美文网首页
谷歌地图计算两个经纬度坐标点的角度

谷歌地图计算两个经纬度坐标点的角度

作者: Pino | 来源:发表于2019-03-27 13:46 被阅读0次
    /*
         * 获取两个经纬度坐标点的角度
         * @param LatLng
         * @param LatLng
         */
        // 计算方位角,正北向为0度,以顺时针方向递增
        public static double computeAzimuth(LatLng la1, LatLng la2) {
            double lat1 = la1.latitude, lon1 = la1.longitude, lat2 = la2.latitude,
                    lon2 = la2.longitude;
            double result = 0.0;
    
            int ilat1 = (int) (0.50 + lat1 * 360000.0);
            int ilat2 = (int) (0.50 + lat2 * 360000.0);
            int ilon1 = (int) (0.50 + lon1 * 360000.0);
            int ilon2 = (int) (0.50 + lon2 * 360000.0);
    
            lat1 = Math.toRadians(lat1);
            lon1 = Math.toRadians(lon1);
            lat2 = Math.toRadians(lat2);
            lon2 = Math.toRadians(lon2);
    
            if ((ilat1 == ilat2) && (ilon1 == ilon2)) {
                return result;
            } else if (ilon1 == ilon2) {
                if (ilat1 > ilat2)
                    result = 180.0;
            } else {
                double c = Math
                        .acos(Math.sin(lat2) * Math.sin(lat1) + Math.cos(lat2)
                                * Math.cos(lat1) * Math.cos((lon2 - lon1)));
                double A = Math.asin(Math.cos(lat2) * Math.sin((lon2 - lon1))
                        / Math.sin(c));
                result = Math.toDegrees(A);
                if ((ilat2 > ilat1) && (ilon2 > ilon1)) {
                } else if ((ilat2 < ilat1) && (ilon2 < ilon1)) {
                    result = 180.0 - result;
                } else if ((ilat2 < ilat1) && (ilon2 > ilon1)) {
                    result = 180.0 - result;
                } else if ((ilat2 > ilat1) && (ilon2 < ilon1)) {
                    result += 360.0;
                }
            }
            return result;
        }
    

    相关文章

      网友评论

          本文标题:谷歌地图计算两个经纬度坐标点的角度

          本文链接:https://www.haomeiwen.com/subject/fyrzvqtx.html