Core data 核心数据复杂SQL查询

Core data 核心数据复杂SQL查询,core-data,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 )

我有以下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 
选择标题,地址1,(6371*acos(弧度(36.414376))
*cos(弧度(纬度))*cos(弧度(经度)-弧度(28.155212))
+sin(弧度(36.414376))*sin(弧度(纬度)))
作为距离
从主要
距离小于0.5的
按距离排序
纬度和经度在主体中是双倍的


非常感谢你的帮助

简而言之,你不能

核心数据和预测不允许您执行数学运算

但是,您可以编写一个
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];
CGFloat minLat=。。。;
CGFloat maxLat=。。。;
CGFloat minLong=。。。;
CGFloat maxLong=。。。;
NSPredicate*谓词=[NSPredicate谓词格式:@“(纬度<%f和纬度>%f)和(经度<%f和经度>%f)”,minLat,maxLat,minLong,maxLong];

根据该查询的结果,您可以缩小到一个圆圈内,以删除角落中的项目。简而言之,你不能

核心数据和预测不允许您执行数学运算

但是,您可以编写一个
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];
CGFloat minLat=。。。;
CGFloat maxLat=。。。;
CGFloat minLong=。。。;
CGFloat maxLong=。。。;
NSPredicate*谓词=[NSPredicate谓词格式:@“(纬度<%f和纬度>%f)和(经度<%f和经度>%f)”,minLat,maxLat,minLong,maxLong];
根据该查询的结果,您可以缩小到一个圆圈内,以删除角落中的项目。盒子的底部