我正在开展一个学校项目,该项目涉及获取纬度/经度点并在已知地点列表中找到前五个最近点。该列表将存储在内存中,但需要注意的是我们必须选择“适当的数据结构”——也就是说,我们不能简单地将所有位置存储在一个数组中并以线性方式逐个比较距离。老师建议按美国各州对地点数据进行分组,避免计算明显距离太远的地点的距离。我想我可以做得更好。
从我的在线研究看来,R-Tree 或其变体之一可能是一个很好的解决方案。不幸的是,这句话是我对实际技术的理解,因为对于我的非学术头脑来说,文献太密集了。
有人可以给我一个非常高的概述,了解使用 lat/long 数据填充 R-Tree,然后遍历树以找到给定点的 5 个最近邻居的过程是什么?
此外,该项目是用 C 语言编写的,我不必为此重新发明轮子,因此,如果您使用了 R 树的现有开源 C 实现,我会对您的经验感兴趣。
更新: 这篇博文描述了一种针对区域分区空间(如 PR 四叉树)的简单搜索算法。希望对未来的读者有所帮助。