我有以下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中是双倍的,
非常感谢任何帮助...答案 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];
从该查询的结果中,您可以缩小到圆圈内以删除角落中的项目。的盒子。