【问题标题】:Core Data Complex SQL Query核心数据复杂 SQL 查询
【发布时间】:2012-09-10 06:15:40
【问题描述】:

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

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

非常感谢您的帮助...

【问题讨论】:

    标签: core-data


    【解决方案1】:

    简短的回答是你不能。

    Core Data 和 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];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多