我想要在常规的纬度/经度网格上排列分布在全球的数据。 我可以查看所有数据,并检查它们所属的网格单元格,然后将它们附加到每个单元格的列表中。这种做法在我看来很长并且效率不高。将随机分布的数据排序到规则网格
我相信这不是一个新问题,但我一直无法在网上找到解决方案。有没有人有建议,或可以指向我的例子或教程?
我想要在常规的纬度/经度网格上排列分布在全球的数据。 我可以查看所有数据,并检查它们所属的网格单元格,然后将它们附加到每个单元格的列表中。这种做法在我看来很长并且效率不高。将随机分布的数据排序到规则网格
我相信这不是一个新问题,但我一直无法在网上找到解决方案。有没有人有建议,或可以指向我的例子或教程?
我相信地球散射会很有用,在这种情况下您可以使用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;
莫顿码的优点在于,可以计算出更大的网格较少的位(高于较少迭代),对于更精细的网格更多的比特。或者计算出细粒度的代码,并使用较大网格的前缀。
感谢这个答案,我会试一试,让你知道它是如何工作:) – 2013-03-13 11:44:48
数据集有多大?根据规模的不同,这可以是Python数据结构练习,也可以是更深入的大数据。另外,你能举出一个数据的例子,以便更容易看到你想要达到的目标。 – ferrix 2013-03-12 16:29:53
数据集可能相当大,如果需要,它可以进入百万。数据将是lat,lon,data1,data2,...也是可调整的。我目前在numpy数组中有数据,每个变量都在一个单独的数组中,但它们也可以组合使用。 – 2013-03-13 11:43:54