2017-07-12 57 views
1

我在考慮如何構建我的應用程序內的數據,其中最重要的查找將從一個位置集合(10,000多個位置)最近的位置,我是尋找最快和最有效的方式來做到這一點。快速/高效的方式來確定從集合最近的位置

想法,我有:

  1. 使用核心數據和存儲cllocations或雙打,與謂詞查詢由最靠近來引用位置

  2. 商店他們在SQLite數據庫,並使用距離公式在sql查詢中

  3. 將所有位置加載到內存中成某種數據結構(數組,鏈表,散列表等),並以不同的方式計算距離

在這些解決方案中,這將是最快/最有效的?還是有另一種解決方案,你會推薦?

+1

檢查SQLite RTree是否可以提供幫助:https://sqlite.org/rtree.html –

+0

這是速度和內存使用之間的折衷;哪個更高效取決於你的環境。 –

+1

使用CoreData和SQLite後備存儲,不可能使用計算值對fetchRequest進行排序,因此您的(1)將很困難。您可以使用謂詞將數據過濾到給定框或半徑內的數據,然後在內存中排序以獲取最近的數據。 – pbasdf

回答

0

正如其他人所提到的,您無法用核心數據對計算值進行排序,因此最近位置的查詢不幸被排除。我已經使用以下「拳擊」方法來近似,可能會或可能不符合您的需求:

  1. 計算目標位置周圍的方框。以度爲單位的偏移量是您需要制定的,但維基百科關於decimal degrees的文章可能是一個很好的起點。將目標偏移+/-一些度數以得到粗糙的矩形。
  2. 獲取該矩形內的每個位置。
  3. 對結果進行排序以找到最接近的結果。

如果您想對最近的位置提出一個請求,您可能需要直接使用SQLite。如果沒有仔細檢查這樣做的總內存影響,並且瞭解您的應用在同一時間出於其他原因使用了多少內存,我不會將所有內容加載到內存中。