工具类之DistanceUtil

0、相关资料

余弦在线计算

华为的科学计算机三角函数,cos10为什么是负的?

Java Math.cos() 计算余弦

1、正文

该工具类主要用于根据经纬度计算距离,其中需要注意的是 在第二个方法中的 Math.toRadians(latitude) 尤为关键,因为这是把纬度转为度数的。

例如:cos(10) = -0.839071529076452是一个负数 为什么? 10大概是3.18π,此处的10不是10度角

所以进行正余弦计算的时候一定要转换成角度。

唉,这些数据知识都给忘了,惭愧啊!

/**
 * Created by songzi522 on 2019/12/5.
 * 描述:根据经纬度计算距离
 */

public class DistanceUtil {

    /**
     * 沿经线(南北方向),经度不变,纬度变化约 1/111 度,这个要加减在纬度上
     * <p>
     * 经度上 1 千米 = 1 / 111 = 0.009009度
     */
    public static double oneKM2Lon = 0.009009;

    /**
     * 沿纬线(东西方向),纬度为a,纬度不变,经度变化约 1/(111*COSa)度,这个要加减在经度上
     * <p>
     * 纬度上1千米 = 1 / 111*cos(纬度) 
     *
     * @param latitude 纬度
     * @return double值
     */
    public static double oneKM2Lat(double latitude) {
        // 纬度上1千米 = 1 / 111*cos(纬度) 
        // 22.479265463306174 小数位太多需要保留六位小数
        double oneKM2Lat = 1 / (111 * Math.cos(Math.toRadians(latitude)));
        LogUtils.e("oneKM2Lat:" + oneKM2Lat);
        BigDecimal bg = new BigDecimal(oneKM2Lat);
        LogUtils.e("222:" + bg.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue());
        return bg.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
    }


}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章