2012-06-02 82 views
1

目前我正在開發基於位置的iPhone/iPad應用程序。我在MapKit中有幾個註釋,我想要做的是跟蹤用戶的位置並顯示3公里內的註釋。有人能給我一個開始嗎?iOS MapKit在一定距離內顯示最近註釋

+0

哪個部位有問題?跟蹤位置?在半徑內查找點?顯示註釋? –

+0

從數據庫中顯示註釋並顯示半徑內的點。如果有的話,請給我建議一些很好的教程。 – BigAppleBump

回答

1

對不起,延遲響應...這個問題剛剛從我的雷達上掉下來。

我打算假設你有一個方法返回一組NSValue包裝的CLLocationCoordinate2D結構體(基本方法是相同的,無論你的內部數據表示是什麼)。 (:在瀏覽器中鍵入警告):

NSSet *locations = ...; 
CLLocation centerLocation = ...; // Reference location for comparison, maybe from CLLocationManager 
CLLocationDistance radius = 3000.; // Radius in meters 
NSSet *nearbyLocations = [locations objectsPassingTest:^(id obj, BOOL *stop) { 
     CLLocationCoordinate2D testCoordinate; 
     [obj getValue:&testCoordinate]; 
     CLLocation *testLocation = [[CLLocation alloc] initWithLatitude:testCoordinate.latitude 
                   longitude:testCoordinate.longitude]; 
     BOOL returnValue = ([centerLocation distanceFromLocation:testLocation] <= radius); 
     [testLocation release]; 
     return returnValue; 
    } 
]; 

隨着過濾集手部座標,你可以創建MKAnnotation實例並將它們添加到地圖中,然後你可以使用的方法一個類似於下面的過濾列表通常的方式,如Apple's documentation中所述。

如果您有數千個測試位置,那麼我認爲這種方法可能會導致性能問題。然後,您需要切換點存儲方式以使用,例如quadtrees,以減少需要精確過濾的點數。但不要過早優化!

希望有幫助!

+0

感謝您的回覆。我已經找到了訣竅。 :) – BigAppleBump