2013-03-12 49 views
0

我想要在常规的纬度/经度网格上排列分布在全球的数据。 我可以查看所有数据,并检查它们所属的网格单元格,然后将它们附加到每个单元格的列表中。这种做法在我看来很长并且效率不高。将随机分布的数据排序到规则网格

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

+0

数据集有多大?根据规模的不同,这可以是Python数据结构练习,也可以是更深入的大数据。另外,你能举出一个数据的例子,以便更容易看到你想要达到的目标。 – ferrix 2013-03-12 16:29:53

+0

数据集可能相当大,如果需要,它可以进入百万。数据将是lat,lon,data1,data2,...也是可调整的。我目前在numpy数组中有数据,每个变量都在一个单独的数组中,但它们也可以组合使用。 – 2013-03-13 11:43:54

回答

0

我相信地球散射会很有用,在这种情况下您可以使用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; 

莫顿码的优点在于,可以计算出更大的网格较少的位(高于较少迭代),对于更精细的网格更多的比特。或者计算出细粒度的代码,并使用较大网格的前缀。

+0

感谢这个答案,我会试一试,让你知道它是如何工作:) – 2013-03-13 11:44:48