2011-06-19 66 views
3

我有2個座標,並希望做一些看似簡單的事情。我想弄清楚,給出:找出距離和兩個座標之間的路線

1)協調由核心定位 3)座標B提供 2)場

以下:

1)A和B之間的距離(目前可以可以使用distanceFromLocation來完成),那麼就可以。 2)從A到B應該採取的過程(與當前旅行的過程不同)

有沒有一種簡單的方法可以實現這一點,任何第三方或內置API?

蘋果似乎並沒有提供這個,但我可能是錯的。

感謝, 〜阿拉什

編輯:

感謝您的快速響應,我相信有可能是有些混亂,我希望得到的過程(從點軸承的點B度,使0度=北,90度=東,類似於CLLocation課程價值迴歸,不是試圖通過轉動方向來計算實際轉彎。

回答

1
+0

使用這種方法,我得到335.218658度,其中例如在這裏公佈:http://www.movable-type.co。 uk/scripts/latlong.html給出了159的初始方位。*和160的最終方位。*這是一個正確的還是一個正確的? – iOS4Life

+0

看起來這個答案是使用等值矩形投影的Pythagoras定理,它不如我的答案使用的Cosines算法的球面定律準確,但它使用較少的三角函數,所以可能會更快。閱讀[本頁](http://www.movable-type.co.uk/scripts/latlong.html)可以比較不同的算法。 – progrmr

+0

看起來像159.〜是正確的初始軸承,如果你是相反的方向,那麼它應該是從點b到點a的初始軸承340,所以我認爲我已經正確實施了這一點,並且我的最終方向是告訴我從b點到a點(相反的方向)的軸承,但仍然是一個很好的軸承數量。思考? – iOS4Life

4

我在GitHub上,做一些代碼。看看headinginRadians here。它基於Cosines的球形定律。來自this page算法的代碼。

/*------------------------------------------------------------------------- 
* Given two lat/lon points on earth, calculates the heading 
* from lat1/lon1 to lat2/lon2. 
* 
* lat/lon params in radians 
* result in radians 
*-------------------------------------------------------------------------*/ 
double headingInRadians(double lat1, double lon1, double lat2, double lon2) 
{ 
    //------------------------------------------------------------------------- 
    // Algorithm found at http://www.movable-type.co.uk/scripts/latlong.html 
    // 
    // Spherical Law of Cosines 
    // 
    // Formula: θ = atan2(sin(Δlong) * cos(lat2), 
    // cos(lat1) * sin(lat2) − sin(lat1) * cos(lat2) * cos(Δlong)) 
    // JavaScript: 
    // 
    // var y = Math.sin(dLon) * Math.cos(lat2); 
    // var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); 
    // var brng = Math.atan2(y, x).toDeg(); 
    //------------------------------------------------------------------------- 
    double dLon = lon2 - lon1; 
    double y = sin(dLon) * cos(lat2); 
    double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon); 

    return atan2(y, x); 
} 
+0

感謝progrmr,我現在檢查了這一點! – iOS4Life

+0

雙標題inRadians(雙lat1,雙lon1,雙lat2,雙lon2) 這是我試過的方法,並提供以下作爲輸入給我一個-0.343130弧度的結果,我轉換爲度數並得到340.340088。你能證實我做對了嗎? 傳入以下座標: \t \t LAT1 = 36.868148 \t \t long1 = -76.046454 \t \t LAT2 = 39.174231 \t \t long2 = -77.111107 所有這些都是之前,使用進入的公式轉換爲弧度以下公式: (值/ 180)* M_PI 任何幫助表示讚賞,再次感謝! – iOS4Life

+0

你可以使用一個在線計算器來檢查它自己,如這個[here](http://www.csgnetwork.com/gpsdistcalc.html) – progrmr

0

如果我正確理解你,你有當前的位置,你有一些其他的位置。你想找到兩點之間的距離(如烏鴉),並找到點之間的步行路徑。

爲了回答你的第一個問題,distanceFromLocation會找到兩個點之間的地球表面距離,即它跟隨地球的曲率,但它會給你與烏鴉蒼蠅的距離。所以我認爲你是對的。

第二個問題更困難。你想要做的就是所謂的路徑尋找。路徑查找,不僅需要搜索算法來決定路徑,還需要關於可能路徑的數據。也就是說,如果你想要通過街道找到一條路,計算機必須知道街道是如何相互連接的。此外,如果您試圖制定一個考慮流量的探路者以及採取兩條不同可能路徑之間的時間差異,則您將需要更多數據。正是由於這個原因,我們通常會把這些任務交給大公司,並且有很多資源,比如谷歌和雅虎。

但是,如果你還有興趣做這件事,看看這個 http://www.youtube.com/watch?v=DoamZwkEDK0

+0

請參閱編輯過的文章,我不是說要走的路徑而是以度爲單位的軸承,例如北向90度的東經0度等。 – iOS4Life