根據兩點經緯座標計算兩點間的距離[JAVA]

來源:互聯網
上載者:User

轉載自http://www.189works.com/article-16712-1.html

解決此問題的關鍵是要理解空間幾何模型,在理解空間幾何模型的基礎上再利用數學公式求取兩點之間的值。其解決步驟如下:

1、設兩點分別為P1、P2,如果其值是用度分秒形式表示,則需將其轉換成十進位度的形式,如P1點緯度為23度30分,則其緯度值轉換成十進位度的形式為23.5度。如果值為十進位度的形式,則直接進入第二步。

2、分別將兩點的經度、緯度值轉換成弧度制形式,如P1緯度為23.5度,轉換成弧度制則為:23.5*PI / 180。分別用 P1latInRad、P1LongInRad、P2latInRad、P2LongInRad表示。

3、分別求取兩點間的緯度差(dlat)與經度差(dlon);

4、求取兩點間的正弦與餘弦值,公式如下:

A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)*Sin2(dlon/2)       (1)

5、求取兩點的正切值,公式如下:

C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A))                     (2)

6、返回兩點間的距離:公式如下:

D=EarthRadiusKm * C                                          (3)

public class distCnvter {

    private final static double PI = 3.14159265358979323; // 圓周率

    private final static double R = 6371229; // 地球的半徑

    public static double getDistance(double longt1, double lat1, double longt2,double lat2) {

        double x, y, distance;

        x = (longt2 - longt1) * PI * R

                * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;

        y = (lat2 - lat1) * PI * R / 180;

        distance = Math.hypot(x, y);

        return distance;

    }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.