用morton代码找到最近的邻居

时间:2017-05-15 12:42:01

标签: python nearest-neighbor z-order-curve

我已经实施了decode/encode方法,将2d点转换为各自的morton code

我在寻找的是找到最近的邻居(min_distance下) 例如,像这样:

points=[(200,300),(500,150),(100,50)]
mortonCodes = {}
for p in points:
    mortonCodes[encode(p)] = p

nearest = findNearestNeighbor(mortonCodes, (201,305))
print(nearest) # ---> should return (200,300)

这可能吗?

1 个答案:

答案 0 :(得分:3)

您可以使用min_distance执行以下操作,例如120: 使用您的查询点qp=(201,305)并通过减去/添加距离来创建最小和最大点:min=(81, 185)max=(321,425)。 现在,您为这两点创建morton码。

距离(210,305)120的距离内的所有点都将使用mcWithin120的morton代码mortonCode(min) <= mcWithin120 <= mortonCode(max)。 如果你有一个由morton代码排序的点列表,这应该会缩小搜索区域的范围。

请注意,范围将包含误报!并非所有具有最小值和最大值之间的莫顿码的点都在给定距离120内,因此您必须检查范围内的所有点是否实际&#39;在正确的距离内。

如果您对空间搜索感兴趣,请查看PH-Tree它是一个类似于四叉树的空间索引,它使用morton顺序来优化树结构和搜索。