2010-02-01 186 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