【问题标题】:iOS: storing large data file with location coordinates for frequent queriesiOS:存储带有位置坐标的大型数据文件以进行频繁查询
【发布时间】:2014-05-12 10:39:20
【问题描述】:

我想找到一种最佳方式来存储包含位置数据坐标的大型数据文件(最大 1.5 GB)中的信息。该文件还包含有关位置的其他信息,例如:位置名称、位置图标。

我需要能够查询数据结构 基于当前用户位置检索“n”个最近的位置(其中 n 是通常是相对较小的数字,例如 30) 到当前用户位置。

我读过一些帖子建议使用“网格”数据结构,它真正反映了当前的地理坐标系(纬度和经度)。

我当前的解决方案是将矩阵初始化为位置网格,其中每个单元格代表一条平行线和一条子午线。然后该单元格包含对该特定“区域”中位置数组的引用(由平行和子午线定义)。

在数据类型方面:一个 NSArray 被初始化为 meridians 的最大数量,另一个被初始化为 parallels 的最大数量。然后每个单元格将包含该特定单元格中所有位置的 NSMutableArray(例如纬度 50.-,经度 0.-)。从这里我将获得该单元格中所有位置的列表,并且我可以检索数据,例如离当前用户位置最近的位置。

这种数据结构对您来说是否合理,或者是否有“最先进的”方法或库可以做到这一点?

此解决方案的缺点是,如果文件的大部分位置位于某个地理区域,则定义的数据结构将具有高强度的区域(单元格)强度较低的位置和区域。因此,我的直觉是我需要某种动态平衡自身的数据结构。

有什么建议吗?

【问题讨论】:

    标签: ios objective-c data-structures geolocation


    【解决方案1】:

    我从另一个基本上要求相同的问题的问题中复制粘贴我的答案:

    看看m-tree。还有许多其他的空间索引:http://en.wikipedia.org/wiki/Spatial_database 最初,您构建数据结构(索引),然后执行范围查询。

    来自 m-trees 的 wiki 页面:

    对于给定的查询对象 Q ∈ D 和最大搜索距离 r(Q),范围查询 range(Q, r(Q)) 选择所有索引对象 Oj 使得 d(Oj, Q) ≤ r(问)。 [2] m-tree 的维基百科页面也有范围查询的算法。

    您可以在亚线性时间内执行范围查询。此外,这仅在您使用的距离度量服从三角不等式时才有效。如果haversine(我以前从来没有做过),服从三角不等式,这应该对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多