快速/高效的方法来确定从集合中最近的位置

时间:2017-07-12 01:10:09

标签: ios swift sqlite core-data cllocation

我正在考虑如何在我的应用程序中构建数据,其中一个最重要的查找将是距离一个位置集合(10,000多个位置)最近的位置,我正在寻找最快速,最有效的方法此

我的想法:

  1. 使用核心数据并存储cllocations或double,使用谓词查询最接近参考位置的顺序

  2. 将它们存储在sqlite数据库中并使用sql查询中的距离公式

  3. 将所有位置加载到内存中的某种数据结构(数组,链表,散列图等)并以不同的方式计算距离

  4. 这些解决方案中哪些是最快/最有效的?或者你会推荐另一种解决方案吗?

1 个答案:

答案 0 :(得分:0)

正如其他人所提到的,您无法使用核心数据按计算值进行排序,因此遗憾地查询最近的位置。我使用过以下内容"拳击"近似的方法,可能会或可能不会满足您的需求:

  1. 计算目标位置周围的框。学位的偏移是你需要解决的问题,但关于decimal degrees的维基百科文章可能是一个很好的起点。将目标偏移+/-某个度数以获得粗糙的矩形。
  2. 获取该矩形内的每个位置。
  3. 将结果排序到内存中以找到最接近的结果。
  4. 如果您想为最近的位置提出一个请求,您可能需要直接使用SQLite。我不会将所有的点加载到内存中,而不会仔细检查这样做的总内存影响,并了解您的应用程序同时出于其他原因使用了多少内存。