关于python:使用morton代码查找最近的邻居

Find nearest neighbor with morton code

我已经实现了decode/encode方法,用于将2d点转换为它们各自的morton code

我正在寻找的是找到最近的邻居(在min_distance下)
因此,例如:

1
2
3
4
5
6
7
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)

这可能吗?


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

在(210,305)的120范围内的所有点将具有morton代码mcWithin120mortonCode(min) <= mcWithin120 <= mortonCode(max)
如果您有按morton编码排序的点列表,则应将搜索范围缩小很多。

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

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