zoukankan      html  css  js  c++  java
  • 根据经纬度坐标 计算两点的球面距离

    地球半径取6378.138千米,输出distance单位米。

    SQL写法:

    select 
        ROUND(
            6378.138 * 2 * ASIN(
                SQRT(
                    POW(
                        SIN(
                            (
                                latitude1 * PI() / 180 - latitude2 * PI() / 180
                            ) / 2
                        ),
                        2
                    ) + COS(latitude1 * PI() / 180) * COS(latitude2 * PI() / 180) 
                * POW(     SIN(     (     longitude1 * PI() / 180 - longitude2 * PI() / 180     ) / 2   ),    2   ) ) ) * 1000 ) AS distance from table where id = 28;

    执行结果:

    Java程序写法:

    public double getDistance(double lon1, double lat1, double lon2, double lat2) {
    
            // 地球半径
            double EARTH_RADIUS = 6378.138;
            
            //经纬度转换成弧度
            lat1 = ConvertDegreesToRadians(lat1);
            lon1 = ConvertDegreesToRadians(lon1);
            lat2 = ConvertDegreesToRadians(lat2);
            lon2 = ConvertDegreesToRadians(lon2);
    
            //差值
            double vLon = Math.abs(lon1 - lon2);
            double vLat = Math.abs(lat1 - lat2);
    
            double h = HaverSine(vLat) + Math.cos(lat1) * Math.cos(lat2) * HaverSine(vLon);
    
            double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h));
    
            return distance;
        }
    
        // HaverSine公式
        public double HaverSine(double x)
        {
            double v = Math.sin(x / 2);
            return v * v;
        }
        
        // 将角度换算为弧度
        public static double ConvertDegreesToRadians(double degrees)
        {
            return degrees * Math.PI / 180;
        }
     
  • 相关阅读:
    MySQL数据库操作(7)联表查询、事务
    MySQL数据库操作(6)查询
    MySQL数据库操作(5)表关系
    Python零基础入门第1章.环境搭建
    Python零基础入门教程目录
    6.函数与代码复用
    元组
    列表
    复数(complex)
    浮点数类型(float)
  • 原文地址:https://www.cnblogs.com/guodongdidi/p/13842871.html
Copyright © 2011-2022 走看看