我有一个存储在MySQL中的x,y,z三维点, 我想问区域,切片或点邻居。 有没有办法使用Peano-Hilbert曲线对点进行索引以加速查询? 或者有更有效的方法将3D数据存储在MySQL中吗?
感谢阿曼。
答案 0 :(得分:1)
我个人从未走过这么远,但我使用Z曲线来存储2D点。这非常有效,并且不觉得有必要尝试实现希尔伯特曲线以获得更好的结果。
这应该可以让您快速过滤掉当前不在附近的点。在绝对最坏的情况下,您仍然需要扫描超过25%的表来查找区域内的点。
解决这个问题的方法是将x y z分成二进制,然后使用曲线将它们拼接成单个值。我希望我已准备好一个SQL脚本,但我只有一个用于2d z曲线,这样做要容易得多。
修改强>:
很抱歉,您可能已经知道这一切,并且只是在寻找SQL示例,但我还有一些补充:
答案 1 :(得分:1)
您可以使用该算法创建geohash,并将其扩展为3个坐标。基本上,您定义将具有可能的3d点的世界多维数据集,然后当您添加更多位时,您缩小多维数据集。然后,您可以一致地定义它,以便左下角具有最小值,并且您可以执行范围检查,如:
XXXXa < the_hash < XXXXz