核心数据和核心位置

时间:2010-02-01 10:58:15

标签: iphone objective-c cocoa-touch core-data core-location

我有一个具有纬度和经度属性的Core Data数据库。有没有办法使用Core Location的getDistanceFrom:方法找到从GPS获得的CLLocation的五个最近位置?我是否必须使用Core Data加载所有对象并通过它们进行解析,每个对象都使用getDistanceFrom:或者是否有更简单的方法?

3 个答案:

答案 0 :(得分:29)

你必须逐个迭代它们;据我所知,没有其他办法可以做到。

但是,当您从核心数据中获取项目时,可以通过使用边界框来提高效率 - 这将减少将返回的对象数量。

即。像

这样的东西
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此外,我没有考虑到经度包裹的事实!

答案 1 :(得分:2)

您无法使用CoreData查找最近的对象,但可能希望使用边界框缩小查询范围。要找到最近的对象,您可能更喜欢使用lat / long的差异,这比计算实际距离要快得多。

我有一个类似的问题:

CoreData: Find minimum of calculated property

答案 2 :(得分:1)

以下示例几乎就是您要找的内容。 它使用SQLite函数来计算ORDER BY子句中的距离(Haversine公式)。 问题是这个例子不直接使用Core-Data,而是使用SQLite API。

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