根據經緯度坐標 計算兩點的球面距離


地球半徑取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;
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM