轉載自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;
}
}