根据经纬度求方位角,以北为0,顺时针为正方向

本文介绍了一种计算地球表面两点间方位角的方法,通过转换经纬度坐标为弧度,并使用三角函数计算出从一点到另一点的角度,范围限定在0到360度之间。

1.传入两个经纬度坐标,计算出两个坐标之间的角度,范围是0-360。
// 计算方位角,正北向为0度,以顺时针方向递增
private 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;
}
--------------------- 
其他参考:http://blog.sina.com.cn/s/blog_658a93570101hynw.html

转载于:https://my.oschina.net/hejunbinlan/blog/2980478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值