我想根据距当前位置的距离对许多位置(航路点)进行排序。 当然,当前位置是一个移动目标,因此对于每次位置更新,都需要重新计算每个位置的距离。但仅重新计算附近的位置就足够了。
我目前使用核心数据,并将到当前位置的距离作为属性存储在表中(但只有在更改时才会更新)来自 configurecell: atindexpath: 方法。 那种工作,但当核心数据自动更新所有距离时,应用程序没有响应。这适用于 250 个位置,但对于 5000 个位置它会崩溃。 我需要它在 10.000 个位置上工作,尽管我可能只需要 1000 个最近的位置左右。
我还没有尝试过的想法: 将所有距离存储在一个单独的内存数组中,只包含记录 ID 和距离。然后按距离对数组进行排序。问题是我无法使用 FetchedResultsController,因为数据库中没有排序字段。
使用谓词根据纬度和经度过滤位置。然后只显示过滤后的位置。
在单独的线程中重新计算距离。
没有一个想法看起来简单到可以尝试一下。
任何人有建议、不同的想法、我的想法的变体?
最佳答案
我最终的解决方案如下: 我选择 1 度纬度和经度内的所有航点(通常大约 1000 个航点),然后计算并存储到表中当前位置的距离。然后我可以对距离进行排序。缓慢的事情是节省核心数据。但是在排序(和获取)之后,我只是取消了更改。节省了整个事情的 90% 以上,所以这个效果很好。
关于iphone - 按距离对多个位置进行排序的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934418/