2010-02-01 226 views
24

我有一個具有經度和緯度屬性的核心數據數據庫。有沒有辦法使用Core Location的getDistanceFrom:方法來查找從GPS獲得的CLLocation的五個最近位置?我是否必須使用核心數據加載所有對象並通過它們解析,每個使用getDistanceFrom:還是有更簡單的方法?核心數據和核心位置

回答

28

你將有一個通過他們一個迭代;據我所知,沒有其他辦法可以做到這一點。

但是,當從核心數據獲取項目時,可以通過使用邊界框來提高效率 - 這將減少將要返回的對象的數量。

即喜歡的東西

float latMax = wantedLat + 1; 
float latMin = wantedLat - 1; 
float lngMax = wantedLng + 1; 
float lngMin = wantedLng - 1; 
NSPredicate *predicate = [NSPredicate 
    predicateWithFormat:@"lat > %f and lat < %f and lng > %f and lng < %f", 
    latMin, latMax, lngMin, lngMax]; 

雖然,這取決於你有多少數據,以及如何接近它的間隔,你將要使用不同數量比1!

山姆

PS另外,我還沒有考慮到一個事實,即東經包裝!

+0

看起來很有用的代碼,謝謝。 – 2010-02-02 02:43:37

+0

感謝你們 - 我在我的應用中使用了類似的東西。但在我看來,這兩套< and >現在是錯誤的方式! – iPhoneDollaraire 2010-03-05 17:38:19

+0

你說得對 - 哎呀! – deanWombourne 2010-03-06 09:41:09

2

您無法使用CoreData查找最近的對象,但可能希望通過使用邊界框來縮小查詢範圍。要找到最近的物體,您可能更願意簡單地使用緯度/長度的差異,這比計算實際距離快得多。

我有一個類似的問題:

CoreData: Find minimum of calculated property

+0

感謝您的鏈接。 – 2010-02-02 02:43:05

2

以下示例幾乎就是您要查找的內容。 它使用SQLite函數來計算ORDER BY子句(Haversine公式)中的距離。 問題是這個例子不直接使用Core-Data,而是使用SQLite API。

http://www.thismuchiknow.co.uk/?p=71