Geospatial 地理空间点搜索的kdtree

Geospatial 地理空间点搜索的kdtree,geospatial,kdtree,Geospatial,Kdtree,我正在尝试为具有经纬度信息的点几何体查找最近的邻居。经过多次搜索,我得出结论,使用基于kd树的方法将是最好的选择。到目前为止,我已经用kd tree尝试了三种不同的方法,但没有一种有效 使用墨卡托(UTM)投影。这是最不有用的,因为距离计算结果是完全错误的,特别是因为这些点分布在全球各地 使用经纬度坐标系统本身。KdTree在lat和long之间交替进行平面拆分。这有一个固有的问题,即纬度是平行的,因此等距,但经度不是。因此,计算到分裂面的距离是纬度的函数。但根据定义,分裂平面只有一个维度——它

我正在尝试为具有经纬度信息的点几何体查找最近的邻居。经过多次搜索,我得出结论,使用基于kd树的方法将是最好的选择。到目前为止,我已经用kd tree尝试了三种不同的方法,但没有一种有效

  • 使用墨卡托(UTM)投影。这是最不有用的,因为距离计算结果是完全错误的,特别是因为这些点分布在全球各地

  • 使用经纬度坐标系统本身。KdTree在lat和long之间交替进行平面拆分。这有一个固有的问题,即纬度是平行的,因此等距,但经度不是。因此,计算到分裂面的距离是纬度的函数。但根据定义,分裂平面只有一个维度——它分裂的维度

  • 通过将lat long转换为xyz,使用笛卡尔坐标。笛卡尔坐标不会产生与使用lat longs计算的距离相同的最近邻。xyz平面上紧密间隔的点在lat长平面上距离更远,反之亦然

  • 有没有人知道解决这个问题的不同方法和有效方法?非常感谢


    编辑:第三种方法我错了。它实际上运行得很好。

    我已经成功地实现了墨卡托投影和四键。将x坐标和y坐标转换为二进制坐标并交错。然后将其视为基数为4的数字。

    实际上,这是一个非常有趣的问题。我已经实现了kd树,但仅用于单个国家的投影坐标。你关于纬度/经度在任何地方(除了赤道)都不相等的观点是正确的。