2011-10-11 35 views
0

我怎樣才能添加一個半徑爲CLLocation協調?我想要的是查看哪些客戶端位於特定座標附近。CLLocation - 添加2公里或2000米半徑爲座標

我需要的是2000米,或2km添加到協調。

我該怎麼做?

+0

這並不意味着什麼,你要一個一個一分維值添加到2尺寸值,你的意思是計算兩個座標之間的距離? – jbat100

+0

@ jbat100不,我想要的是將2000米的半徑添加到座標:2000到緯度和2000到經度,以便減去這些值,我可以比較所有客戶端座標,並獲得所有座標一個2000米的位置。 –

回答

1

您不能「添加半徑」到座標。如果你有CLLocation對象(比如LOC1和loc2的),你可以做的,就是計算出它們之間的距離:

CLLocationDistance dist = [loc1 distanceFromLocation:loc2]; 

,看看是否DIST(這是米)是大於或小於2000.0。

座標經度/緯度(這是極座標)和距離之間的轉換是複雜的,這就是爲什麼SDK爲您提供了這一功能。

+0

這樣,我必須通過所有的客戶。想象一下,我在CoreData中有40.000個客戶端對象。如果我可以在經度和緯度上轉換2000米,我可以製作NSPredicate並立即獲得結果。這樣,我必須通過所有的客戶端,這將需要一段時間在應用程序...有沒有任何有效的方法? –

+0

你不能將2000米轉換成經度和緯度,這就是要點。在赤道180度的經度變化約爲20000km,在北極180度的經度變化爲0km。你可以做的是預先計算距離並緩存它們。或者,對於每個客戶對象都有一個預先計算的有效經度和緯度範圍,則可以使用謂詞。 – jbat100

1

由於距離很小,可以用等距離長方圓柱距離近似。這種近似比使用Haversine公式更快。因此,要獲得從參考點(lat1/lon1)到您正在測試的點(lat2/lon2)的距離,請使用下面的公式。重要提示:您需要將所有經/緯度點轉換爲弧度:

R = 6371 // radius of the earth in km 
x = (lon2 - lon1) * cos(0.5*(lat2+lat1)) 
y = lat2 - lat1 
d = R * sqrt(x*x + y*y) 

如果d小於2,那麼你的觀點是在您的參考點2公里。

要有效地通過您的積分遊行,責令經度點。距離2度的經度將大於2公里(除非你靠近極點),因此你不需要循環這些。

+0

直到公式一致的距離是多少?用戶將能夠選擇距離。什麼是最大距離? 100公里? –

+0

這更多的是你的準確度要求是什麼。 – TreyA