组织地理参考数据的最佳方法是什么?

时间:2013-08-29 07:09:08

标签: ios algorithm data-structures tree core-location

我有几个位置,每个位置都有纬度和经度,我需要找到距离给定点最近的位置。我可以使用Core位置来查找从点到位置的距离,但我的算法效率很低(只需枚举每个位置,计算距离并跟踪最低值)。只需几点即可正常工作,但当你达到10万件时,事情就会开始嘎然而止。

创建数据的最佳方法是什么,以便我可以快速确定给定点的最近位置以及给定位置是否在指定的矩形内?

我知道游戏玩家使用树形结构进行快速碰撞测试,但我是树结构的新手,并想知道如何开始?在iOS中是否有任何合适的树结构,或者我是否必须构建自己的树结构?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我会使用一种Quadtree。使用不断增加的单元格大小在网格中组织地图。 如果您在附近寻找点,请查看网格中具有最小单元格的相邻单元格,如果找不到,请在下一个较粗的网格中搜索相邻单元格。

这并不完美,因为网格总是引用Manhatten distance,但你可以获得最近点的好候选人。对于每个候选人,您要计算您感兴趣的实际距离。

答案 1 :(得分:1)

如果您在创建结构后不需要更改结构并希望将其全部放在内存中,我建议使用k-d树。它简单而快速,但在第一次批量加载后添加新元素会使其失衡并且性能下降。

如果您想要有效添加和删除元素,支持多边形元素或将树结构保留在磁盘上,R-tree的某些变体会更好。