本文解释了如何计算bigmin和litmax(大最小值和小最大值(。
我很难理解第 4 步的措辞,以了解它将如何转换为伪代码、C 或 python。
步骤 4
我们知道的水平分割法需要计算最接近 yn 分界线的纬度值。取最小值和最大值的最高有效位到它们的第一个差异点 yn,并将其称为 y[1..m]我们知道,分界线正上方的纬度值将被二进制编码为 y[1..m] 0111...,而 y[1..m] 1000...这转化为我们对 LitMax 和 BigMin的纬度值。
由于在我们的示例中差异最大的位是 y4,因此我们的 LitMax 和 BigMin 纬度值等于 0111 和 1000。
在垂直划分中,我们只是将其反转为 x 位和经度。
我从坐标翻译 z 顺序索引没有问题,反之亦然。
我只对计算 bigmin 和 litmax 感兴趣,因为它们允许很大的加速。我已经搜索过,但我找不到有关这些特定位掩码操作的好细节(答案在这里如何使用莫顿阶(z阶曲线(在范围搜索中?并没有真正涵盖它,链接的dynamodb文章也没有(。
看看原文中的第 76 页决策表 http://hermanntropf.de/media/multidimensionalrangequery.pdf 美国专利US7321890B2中更详细地描述了 Z 索引的 Bigmin 计算背后的想法,该专利是关于使用希尔伯特阶数而不是 Z 阶数。请参阅第 2 节:"用于 Z 索引的 BIGMIN 解决方案",该部分已包含在内以简化描述,因为专利中的许多想法与希尔伯特索引的应用相同。 https://patents.google.com/patent/US7321890B2/en?assignee=hermann+tropf&oq=hermann+tropf。一旦为 Bigmin 实现,只需查看原始文章中的 Litmax 决策表即可。我希望这可能会有所帮助。