iOS:存储带有位置坐标的大数据文件,以便进行频繁查询

时间:2014-05-12 10:39:20

标签: ios objective-c data-structures geolocation

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

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

我看过一些建议使用" grid"数据结构,它真实地反映了当前的地理坐标系(latitiude和longitide)。

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

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

这个数据结构对你来说是否合理,或者是否有"最先进的技术?方法或图书馆这样做?

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我复制了另一个基本上要求同样问题的问题的答案:

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

来自m-trees的维基页面:

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

您可以在子线性时间内执行范围查询。此外,只有当您使用的距离测量服从三元组不等式时,此方法才有效。如果是hasrsine(我之前从未接受过),请遵守三角不等式,这应该适合你。