我正在尝试在常规纬度/经度网格上订购分散在全球各地的数据。我可以浏览所有数据并检查它们属于哪个网格单元格,然后将它们附加到每个单元格的列表中。这种方法在我看来很长而且效率不高。
我确信这不是一个新问题,但我一直无法在网上找到解决方案。有没有人有建议或可以指出我的例子或教程?
我正在尝试在常规纬度/经度网格上订购分散在全球各地的数据。我可以浏览所有数据并检查它们属于哪个网格单元格,然后将它们附加到每个单元格的列表中。这种方法在我看来很长而且效率不高。
我确信这不是一个新问题,但我一直无法在网上找到解决方案。有没有人有建议或可以指出我的例子或教程?
我相信 geohashing 会很有用,在这种特殊情况下,您可以使用Morton number。这个名为“空间键 - 内存高效 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 代码的优点是您可以为更大的网格计算更少的位(上面的迭代更少),为更精细的网格计算更多的位。或者计算细粒度的代码,只为更大的网格使用前缀。