以下示例几乎就是您要查找的内容。 它使用SQLite函数来计算ORDER BY子句中的距离(Haversine公式)。 问题是这个例子不直接使用Core-Data,而是使用SQLite API。
http://www.thismuchiknow.co.uk/?p=71
你将不得不逐个迭代它们;据我所知,没有别的办法可以做到。
但是,当您从核心数据中获取项目时,可以通过使用边界框来提高效率 - 这将减少将返回的对象数量。
也就是说
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此外,我还没有考虑到经度包裹的事实!
您不能使用CoreData查找最近的对象,但可能希望使用边界框缩小查询范围。要找到最近的对象,您可能更喜欢使用lat / long的差异,这比计算实际距离要快得多。
我有一个类似的问题:
CoreData:查找计算属性的最小值