2011-01-25 69 views
2

我已經定義了一個名爲FGLocation的類,它符合MKAnnotation協議,我試圖做的是測量這兩個對象之間的距離。我注意到我可以使用方法distanceFromLocation:它被定義爲CLLocation類的方法。正如你在下面看到的,我創建了兩個臨時CLLocation對象來進行計算,但我不禁想到我可能錯過了一個更好/更簡單的方法。有沒有人對我正在做的事情有什麼意見,或者我可以怎樣做得更好?使用distanceFromLocation:on none CLLocation對象?

// IS THERE A BETTER WAY TO DO THIS? 
FGLocation *root = [annotations objectAtIndex:counter-1]; 
FGLocation *leaf = [annotations objectAtIndex:counter]; 

CLLocation *rootLocation = [[CLLocation alloc] initWithLatitude:[root coordinate].latitude longitude:[root coordinate].longitude]; 
CLLocation *leafLocation = [[CLLocation alloc] initWithLatitude:[leaf coordinate].latitude longitude:[leaf coordinate].longitude];         
CLLocationDistance thisDistance = [rootLocation distanceFromLocation:leafLocation]; 
[rootLocation release]; 
[leafLocation release]; 

NB:我FGLocation對象定義爲(見下文),我的文檔,我不應該繼承CLLocation注意到。

@interface FGLocation : NSObject <MKAnnotation> { 

回答

2

我認爲,你在做什麼是一個公平的做法,與您可能要實現某種形式的重新計算緩存機制/門檻的,如果你經常或上一分不少這樣做可能是個例外。準確計算距離涉及非歐幾里德幾何,並且計算起來很昂貴。 http://en.wikipedia.org/wiki/Haversine_formula

具體情況取決於點位於地球上的,以及是否精度是非常重要的,你也可以通過假裝在歐幾里得空間進行合作,並藉助勾股定理捏造的東西。我已經使用這種方案在大型數據集上創建粗濾器,然後對通過濾波器的點進行更精確的計算。

+0

嗨,這是一個公平的觀點,在這個階段有很少的幾點,可能約爲36個。你的權利,我不需要擔心地球的曲率,因爲點都是非常地方的(在大約50公里範圍內),並且公平地說,我不會爲了超級準確而煩惱,在100米範圍內沒事的。我主要擔心的是,我正在圍繞某種方式進行計算,並缺少一些可以直接在我的FGLocation對象上調用distanceFromLocation而不創建兩個臨時CLLocation對象的pro技巧。很多apprciated。 – fuzzygoat 2011-01-25 18:58:46