将随机分布的数据排序到常规网格中

时间:2013-03-12 16:07:06

标签: python

我正在尝试在常规的lat / lon网格上排序遍布全球的数据。 我可以浏览所有数据并检查它们属于哪个网格单元,然后将它们附加到每个单元格的列表中。这种方法在我看来很长,而且效率不高。

我确信这不是一个新问题,但我无法在网上找到解决方案。有没有人有建议或者可以指点我的示例或教程?

1 个答案:

答案 0 :(得分:0)

我认为geohashing很有用,在这种特殊情况下你可以使用Morton number。这个名为"Spatial Keys – Memory Efficient Geohashes"的博客有示例实现,它是用Java编写的,但Python版本并没有太大的不同。

long hash = 0;
double minLat = minLatI;
double maxLat = maxLatI;
double minLon = minLonI;
double maxLon = maxLonI;
int i = 0;
while (true) {
    if (minLat  midLat) {
            hash |= 1;
            minLat = midLat;
        } else
            maxLat = midLat;
    }

    hash <<= 1;
    if (minLon  midLon) {
            hash |= 1;
            minLon = midLon;
        } else
            maxLon = midLon;
    }

    i++;
    if (i < iterations)
        hash <<= 1;
    else
        break;
}
return hash;

Morton代码的优点是,您可以为更大的网格计算更少的位(上面的迭代次数更少),为更精细的网格计算更多的位。或者计算出细粒度代码,只使用更大网格的前缀。