2010-02-01 11 views
24

Mam bazę danych rdzenia o właściwościach szerokości i długości geograficznej. Czy istnieje sposób, aby użyć metody lokalizacji lokalizacji getDistanceFrom:, aby znaleźć pięć najbliższych lokalizacji do CLLocation uzyskanych z GPS? Czy muszę ładować wszystkie obiekty za pomocą Core Data i analizować je, używając na każdym z nich getDistanceFrom: lub czy jest łatwiejszy sposób?Dane podstawowe i lokalizacja rdzenia

Odpowiedz

28

trzeba będzie wykonać iterację je jeden po drugim; o ile mi wiadomo, nie ma innego sposobu, aby to zrobić.

Możesz jednak zwiększyć wydajność, używając ramki ograniczającej, gdy otrzymasz elementy z podstawowych danych - zmniejszy to liczbę zwracanych obiektów.

tj Coś

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]; 

Choć, w zależności od tego ile danych masz i jak dokładnie to rozstawione, będziesz chciał użyć innego numeru niż 1!

Sam

PS Również mam nie brać pod uwagę fakt, że geograficznej tajemnicy!

+0

Wygląda na użyteczny kod, dzięki. –

+0

Dzięki za to - użyłem czegoś podobnego w mojej aplikacji. Ale wydaje mi się, że oba zestawy < and > są teraz w niewłaściwy sposób! – iPhoneDollaraire

+0

Masz rację - ups! – deanWombourne

2

Nie można użyć CoreData do znalezienia najbliższego obiektu, ale można zawęzić zapytanie za pomocą obwiedni. Aby znaleźć najbliższy obiekt, możesz użyć prostej różnicy długości/długości, która jest znacznie większa niż obliczenie rzeczywistych odległości.

Miałem podobny pytanie:

CoreData: Find minimum of calculated property

+0

Dzięki za link. –

2

Poniższy przykład jest niemal tym, czego szukasz. Używa funkcji SQLite do obliczenia odległości w klauzuli ORDER BY (formuła Haversine). Problem polega na tym, że ten przykład nie korzysta bezpośrednio z Core-Data, ale bezpośrednio z interfejsu API SQLite.

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

Powiązane problemy