2012-09-10 72 views
0

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

不能弄明白......

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 

纬度和经度是实体主要双打,

非常感谢您的帮助......

回答

3

简短的回答是,你可以“T。

核心数据和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]; 

从该查询的结果,你可以再圆内缩小以去除在弯道中的项目。的盒子。

+0

非常感谢Marcus的建议! – Nimrod7