java获取方位角与两个方位角的差值

整理文档的时候突然发现当时外卖项目写的个工具类,先记录一下吧,万一以后会用得到

    /**
     * @param latA 纬度1
     * @param lngA 经度1
     * @param latB 纬度2
     * @param lngB 经度2
     * @return
     */
    private static double getAngle1(double latA, double lngA, double latB, double lngB) {
        double y = Math.sin(lngB - lngA) * Math.cos(latB);
        double x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(lngB - lngA);
        double brng = Math.atan2(y, x);

        brng = Math.toDegrees(brng);
        if (brng < 0)
            brng = brng + 360;
        return brng;
    }
/**
     * 获取相差方位角
     *
     * @param deliveryLat 骑手纬度
     * @param deliveryLng 骑手经度
     * @param orderLat    身上订单用户纬度
     * @param orderLng    身上订单用户经度
     * @param newLat      新来订单用户纬度
     * @param newLng      新来订单用户经度
     * @return
     */
    public static double getSubAngle(double deliveryLat, double deliveryLng, double orderLat, double orderLng, double newLat, double newLng) {
        Double aAngle = getAngle1(deliveryLat, deliveryLng, orderLat, orderLng);
        Double bAngle = getAngle1(deliveryLat, deliveryLng, newLat, newLng);
        if (aAngle >= 90 && aAngle < 180) {
            aAngle = aAngle - 90;
        } else if (aAngle >= 180 && aAngle < 270) {
            aAngle = aAngle - 180;
        } else if (aAngle >= 270 && aAngle < 360) {
            aAngle = aAngle - 270;
        }
        Double subAngle;
        if (bAngle <= 90 && bAngle <= aAngle) {
            subAngle = aAngle - bAngle;
        } else if (bAngle > 270) {
            subAngle = aAngle - (360 - bAngle);
        } else {
            subAngle = bAngle - aAngle;
        }
//        subAngle = aAngle + bAngle;
        return subAngle;
    }

有时间再优化吧,暂时先整理下来

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。