什么比边界框更好?

时间:2009-12-04 17:04:11

标签: algorithm geolocation gis space-partitioning

我有一个场景,我有100万经度纬度点。

当添加新的长/纬度点时,我想知道有效哪些其他点在用户配置的距离参数内,所以我可以将它们添加到列表中。

有什么比边界框更好的东西?

我很想看到算法,参考资料和一些实现;)非常感谢你!

3 个答案:

答案 0 :(得分:3)

有很多选项更好,主要是基于space partitioning

一个常见的,通常非常好的选择(实施起来不太难)是使用KD-TreeQuadtrees更容易实现,但搜索速度较慢。根据数据的分布和您的要求,其他空间分区算法可能表现更好,内存要求更低或其他相关问题。

答案 1 :(得分:1)

一位同事告诉我,他在使用Morton-Code作为GIS数据的空间索引方面有很好的经验,这可能值得研究。

答案 2 :(得分:1)

这种快速而肮脏的方法可以为您节省一些悲伤:将地球表面划分为1度框。然后你将有一个180x360元素阵列,你只需要搜索少量的盒子,包括包含新点的盒子和紧邻它的所有盒子,其中一个角落在用户指定的距离内。您会发现有一些技巧可以用来快速找出要使用的盒子而不考虑它们。只是不要忘记纬度和经度环绕。

如果你的“唯一”拥有数百万分,并且它们没有聚集成热点,那么这可能会让你通过。

一种理论上优越的方法:您可以将每个点映射到三维空间,然后将它们存储在octree中,这样您就可以在任意距离内快速找到附近的点。当然,三维空间中的距离与地球上的大圆距离略有不同,因此您必须计算转换因子。但这应该很简单。您没有提到实现语言,但几乎可以肯定,对于您正在使用的任何语言,都会有一个经过良好测试的八叉树实现。如果您不介意插入第三方代码,那么这个解决方案就是去。