用于地理空间点搜索的 kdtree
Posted
技术标签:
【中文标题】用于地理空间点搜索的 kdtree【英文标题】:kdtree for geospatial point search 【发布时间】:2015-01-12 01:40:24 【问题描述】:我正在尝试使用我可用的经纬度信息为点几何找到最近的邻居。经过大量搜索后,我得出结论,使用基于 kd-tree 的方法将是最佳选择。到目前为止,我已经用 kd-tree 尝试了三种不同的方法,但都没有奏效。
使用墨卡托 (UTM) 投影。这是最没用的,因为距离计算结果完全错误,特别是因为这些点遍布全球。
使用经纬度坐标系统本身。 KdTree 在 lat 和 long 之间交替用于分割平面。这有一个固有的问题,因为纬度是平行的,因此等距,但经度不是。因此计算与分裂平面的距离是纬度的函数。但是根据定义,分裂平面只带有一个维度——它在其上分裂的那个维度。
通过将 lat-long 转换为 xyz 来使用笛卡尔坐标。笛卡尔坐标不会产生与使用 lat-longs 计算的距离相同的最近邻。在 xyz 平面上距离较近的点在 lat-long 平面上距离较远,反之亦然。
有没有人知道解决这个问题的另一种方法和一种有效的方法?非常感谢!
编辑:我对第三种方法有误。它实际上工作得很好。
【问题讨论】:
其实这是一个非常有趣的问题。我已经实现了 kd-trees,但仅适用于单个国家的投影坐标。您关于纬度/经度在任何地方(赤道除外)都不相等的观点是一个很好的观点。 【参考方案1】:我已经成功实现了墨卡托投影和四键。将 x 和 y 坐标转换为二进制并交错。然后将其视为以 4 为底的数字。
【讨论】:
以上是关于用于地理空间点搜索的 kdtree的主要内容,如果未能解决你的问题,请参考以下文章