非常「簡單」的問題:給定兩個CLLocationCoordinate2D,如何從第一個到第二個獲得方位(以弧度表示)?我已經做了大量的研究和研究,包括一般問題和Objective-C/Cocoa Touch/iOS。計算兩個CLLocationCoordinate2D之間的方位
這裏是我的實現:
- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = fromLoc.latitude;
float fLng = fromLoc.longitude;
float tLat = toLoc.latitude;
float tLng = toLoc.longitude;
return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));
}
但是,這種方法沒有返回洽結果我。如果軸承接近正北或者正南,這似乎是正常,但是,任何其他方向似乎返回不一致的數據,例如:
從50.405018,8.437500
爲51.339802,12.403340
我的方法的返回值:5.918441弧度
應該是1.18660576弧度
(見http://www.movable-type.co.uk/scripts/latlong.html和http://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)
我已經雙重和三重檢查了公式是正確的。我也發現了一些像上面這個例子那樣的值,一些是正確的,一些是錯誤的。我玩過各種模塊或返回值的界限,也沒有運氣。
任何想法?我的代碼有問題嗎?也許我誤解了數學函數的工作原理?
我最初的反應是「轉換緯度/經度弧度?這是什麼樣的瘋狂?「然後我真的嘗試了它,就像一個魅力 – 2010-09-29 05:20:53
好點。地理緯度和經度度的使用是如此根深蒂固,很容易忘記他們描述球體幾何中的角度地球大多數現代語言中的trig函數需要弧度,強制轉換 – 2010-09-30 05:34:26
你能解釋2嗎?如果fLng較大,會怎樣? – Nick 2010-10-12 11:02:43