0

我有以下 sql 查询,任何人都可以帮助我将其转换为 NSPredicate 以运行核心数据吗?

想不通...

SELECT title, address1, ( 6371 * acos( cos( radians(36.414376) ) 
* cos( radians( latitude ) ) * cos( radians( longitude ) - radians(28.155212) ) 
+ sin( radians(36.414376) ) * sin( radians( latitude ) ) ) ) 
AS distance 
FROM main 
HAVING distance < 0.5 
ORDER BY distance 

纬度和经度在实体主中是双倍的,

非常感谢您的帮助...

4

1 回答 1

3

简短的回答是你不能。

核心数据并且NSPredicate不允许您执行数学运算。

但是,您可以做的是编写一个NSPredicate返回框内的每个地址的 a。

您需要做的是预先计算最小纬度和经度以及最大纬度和经度。

然后你NSPredicate变成:

CGFloat minLat = ...;
CGFloat maxLat = ...;
CGFloat minLong = ...;
CGFloat maxLong = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(latitude < %f AND latitude > %f) AND (longitude < %f AND longitude > %f)", minLat, maxLat, minLong, maxLong];

然后,从该查询的结果中,您可以缩小到一个圆圈内以删除角落中的项目。的盒子。

于 2012-09-11T14:56:23.550 回答