核心数据复杂SQL查询

时间:2012-09-10 06:15:40

标签: core-data

我有以下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 

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

非常感谢任何帮助...

1 个答案:

答案 0 :(得分:3)

简短的回答是你不能。

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

但是,你可以做的是写一个NSPredicate来返回一个方框内的每个地址。​​

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

然后你的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];

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