代码之家  ›  专栏  ›  技术社区  ›  nevan king

核心数据和核心位置

  •  24
  • nevan king  · 技术社区  · 16 年前

    我有一个具有纬度和经度属性的核心数据数据库。有没有办法使用核心位置的 getDistanceFrom: 方法来查找到某个位置最近的五个位置 CLLocation 从全球定位系统获得?我是否必须使用核心数据加载所有对象,并使用 还是有更简单的方法?

    3 回复  |  直到 16 年前
        1
  •  29
  •   deanWombourne    16 年前

    你将不得不一个接一个地遍历它们;据我所知,没有别的办法。

    但是,当您从核心数据获取项目时,可以通过使用边界框来提高效率—这将减少将返回的对象数量。

    float latMax = wantedLat + 1;
    float latMin = wantedLat - 1;
    float lngMax = wantedLng + 1;
    float lngMin = wantedLng - 1;
    NSPredicate *predicate = [NSPredicate
        predicateWithFormat:@"lat > %f and lat < %f and lng > %f and lng < %f",
        latMin, latMax, lngMin, lngMax];
    

    不过,根据您拥有的数据量及其间距,您可能希望使用不同于1的数字!

    另外,我还没有考虑到经度包裹的事实!

        2
  •  2
  •   Community Mohan Dere    9 年前

    不能使用CoreData查找最近的对象,但可能需要使用边界框缩小查询范围。要查找最近的对象,您可能更愿意使用lat/long中的差值,这比计算实际距离快得多。

    我有一个类似的问题:

    CoreData: Find minimum of calculated property

        3
  •  1
  •   Bjinse    15 年前

    下面的示例几乎就是您要查找的内容。 它使用SQLite函数计算ORDER BY子句(哈弗森公式)中的距离。 这个例子没有直接使用SQLCore API,但问题在于SQLCore API没有直接使用。

    http://www.thismuchiknow.co.uk/?p=71