2013-10-10 78 views
0

我想要得到兩個點A和B,它們各自在中心點C周圍5km的距離和垂直線。 因此,點A和B創建「邊框」邊長10公里,C在這個盒子的正中央。 這是我的代碼:計算Java中緯度和經度座標的「框」

 //Distance is 5 kilometers 
     float distance = 5;  

     float latCenter = locationInfo.lastLat; 
     float lngCenter = locationInfo.lastLong; 

     // Calculate corner point distance in lat and long 
     float latDelta = distance/110.54f; 
     float longDelta = distance/(111.320f(float)Math.cos((double)latCenter)); 

     // Calculate coordinates of the corner points 
     float latA = lat - latDelta; 
     float longA = lng - longDelta; 
     float latB = lat + latDelta; 
     float longB = lng + longDelta; 

我知道這些都是近似值,但與1公里〜誤差幅度接近在我的情況是好的。 垂直距離很好(10.06km),但水平距離只有6km而不是10km。

我的公式有什麼問題?我猜它有一些非常簡單的數學錯誤,但我無法找到它。我需要一個非常簡單和快速的代碼,所以我根據我對這個StackOverflow的答案算了一筆賬:Simple calculations for working with lat/lon + km distance?

回答

2

我會賭degres VS弧度(從javadoc of cos):

public static double cos(double a)

返回角度的三角餘弦。特殊情況: 如果參數是NaN或無窮大,則結果是NaN。 結果必須在正確舍入結果的1 ulp範圍內。結果必須是半單調的。

參數: a - 以弧度表示的角度。

返回: 參數的餘弦值。

+0

這是錯誤,它現在工作完美!感謝您的快速幫助! –

+0

不客氣:) – 2013-10-10 17:32:44