iphone - 按距离对多个位置进行排序的最快方法是什么?

标签 iphone objective-c core-data core-location

我想根据距当前位置的距离对许多位置(航路点)进行排序。 当然,当前位置是一个移动目标,因此对于每次位置更新,都需要重新计算每个位置的距离。但仅重新计算附近的位置就足够了。

我目前使用核心数据,并将到当前位置的距离作为属性存储在表中(但只有在更改时才会更新)来自 configurecell: atindexpath: 方法。 那种工作,但当核心数据自动更新所有距离时,应用程序没有响应。这适用于 250 个位置,但对于 5000 个位置它会崩溃。 我需要它在 10.000 个位置上工作,尽管我可能只需要 1000 个最近的位置左右。

我还没有尝试过的想法: 将所有距离存储在一个单独的内存数组中,只包含记录 ID 和距离。然后按距离对数组进行排序。问题是我无法使用 FetchedResultsController,因为数据库中没有排序字段。

使用谓词根据纬度和经度过滤位置。然后只显示过滤后的位置。

在单独的线程中重新计算距离。

没有一个想法看起来简单到可以尝试一下。

任何人有建议、不同的想法、我的想法的变体?

最佳答案

我最终的解决方案如下: 我选择 1 度纬度和经度内的所有航点(通常大约 1000 个航点),然后计算并存储到表中当前位置的距离。然后我可以对距离进行排序。缓慢的事情是节省核心数据。但是在排序(和获取)之后,我只是取消了更改。节省了整个事情的 90% 以上,所以这个效果很好。

关于iphone - 按距离对多个位置进行排序的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934418/

相关文章:

iphone - 预先存在的核心数据数据

iphone - 解析 url 字符串

ios - 多次调用 UICollectionView cellForItemAtIndexPath

objective-c - 文本字段启用清除按钮但不允许键盘出现

objective-c - plist 文件中的根项类型?

ios - 核心数据 - 如何跟踪实体集的子集

Iphone(chrome 和 safari)忽略最小宽度

java - 为图像编辑器快速、可靠地保存/加载文档状态

iphone - 使用轻量级迁移更改核心数据实体名称?

swift - 创建 NSManagedObject 子类...在我的项目中创建一个新错误