2011-04-30 41 views

回答

0

不知道你所要求的代碼來計算兩個地理點之間的距離......

如果是這樣,這是在C#中,不應該有太大的將其轉換成Java;

private double distance(double lat1, double lon1, double lat2, double lon2, char unit) { 
    double theta = lon1 - lon2; 
    double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); 
    dist = Math.Acos(dist); 
    dist = rad2deg(dist); 
    dist = dist * 60 * 1.1515; 
    if (unit == 'K') { 
    dist = dist * 1.609344; 
    } else if (unit == 'N') { 
    dist = dist * 0.8684; 
    } 
    return (dist); 
} 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
//:: This function converts decimal degrees to radians    ::: 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
private double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
//:: This function converts radians to decimal degrees    ::: 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
private double rad2deg(double rad) { 
    return (rad/Math.PI * 180.0); 
} 
+0

而只是爲了解釋它是如何工作 - 在Trig的東西計算一個點之間的夾角,地球的中心,點二,這是再從弧度轉換度。接下來使用航海英里的原始定義,即沿着大圓圈路線有60納米,其對角線爲1度。然後乘以1.1515將nm轉換爲法定英里數。最後,如果您希望以km爲單位的答案乘以1.609344將法定英里數轉換爲km。如果您希望以nm爲單位的答案,您將法定英里乘以0.8684以撤銷從nm到法定英里的轉換。 – QuantumMechanic 2011-04-30 23:49:38

+0

k代表公里的答案,N代表海里數。 「長久以來的差異總是如此」,你的意思是什麼? – 2011-04-30 23:57:14

+0

也.. ..優秀的解釋,QuantumMechanic – 2011-04-30 23:57:55