0

我有几个位置,每个位置都有纬度和经度,我需要找到离给定点最近的位置。我可以使用核心位置来查找从该点到该位置的距离,但我的算法效率非常低(仅枚举每个位置,计算距离并跟踪最小值)。在几个点上工作得很好,但是当你达到 100,000 时,事情开始吱吱作响。

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

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

提前致谢。

4

2 回答 2

1

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

这并不完美,因为网格总是指曼哈顿距离,但您可以获得最近点的良好候选者。对于每个候选人,您都可以计算出您感兴趣的实际距离。

于 2013-08-29T07:27:27.603 回答
1

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

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

于 2013-08-29T07:39:18.000 回答