数据分析系列 之根据经纬度计算两点之间的距离

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析系列 之根据经纬度计算两点之间的距离相关的知识,希望对你有一定的参考价值。

1 基础知识:
地球半径:
由于地球不是一个完美的球体,所以并不能用一个特别准确的值来表示地球的实际半径,不过由于地球的形状很接近球体,用[6357km] 到 [6378km]的范围值可以涵盖需要的所有半径。

2 Java实现代码:

public final class DistanceUtils 
 
    /**
     * 地球半径,单位 km
     */
    private static final double EARTH_RADIUS = 6378.137;
 
    /**
     * 根据经纬度,计算两点间的距离
     *
     * @param longitude1 第一个点的经度
     * @param latitude1  第一个点的纬度
     * @param longitude2 第二个点的经度
     * @param latitude2  第二个点的纬度
     * @return 返回距离 单位千米
     */
    public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) 
        // 纬度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // 经度
        double lng1 = Math.toRadians(longitude1);
        double lng2 = Math.toRadians(longitude2);
        // 纬度之差
        double a = lat1 - lat2;
        // 经度之差
        double b = lng1 - lng2;
        // 计算两点距离的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // 弧长乘地球半径, 返回单位: 千米
        s =  s * EARTH_RADIUS;
        return s;
    
 
    public static void main(String[] args) 
        double d = getDistance(117.305679, 32.984171, 118.353454, 33.996049);
        System.out.println(d);
    

3 公式理解:

Math.pow(x,y)      //这个函数是求x的y次方
Math.toRadians     //将一个角度测量的角度转换成以弧度表示的近似角度
Math.sin           //正弦函数
Math.cos           //余弦函数
Math.sqrt          //求平方根函数
Math.asin          //反正弦函数

返回的单位是千米,如果想返回米,可以修改地球半径的单位从千米到米,并且由于该结果是double类型的,所以还可以借助Math.round方法进行四舍五入为long类型,然后精确到米。
// ......
// 弧长乘地球半径(6378137)
s =  s * EARTH_RADIUS;
// 返回类型: long,单位: 米
return Math.round(s * 10000) / 10000;

参考资料:
https://blog.csdn.net/xiejm2333/article/details/73297004
https://blog.csdn.net/qq_35071164/article/details/90602501

以上是关于数据分析系列 之根据经纬度计算两点之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

根据两点经纬度计算距离

根据两点的经纬度坐标计算两个坐标点之间的直线距离

根据经纬度和半径计算经纬度范围,根据两点经纬度计算距离

利用SQL计算两个地理坐标(经纬度)之间的地表距离

两个经纬度算距离公式 方法是啥