ElasticSearch QuadPrefixTree 与 GeohashPrefixTree

Cod*_*ner 5 spatial quadtree geospatial elasticsearch

我是 ElasticSearch 的新手,我想了解使用 geohashes 和四叉树之间的区别。参考文献中写道:

  • GeohashPrefixTree - 使用 geohash 作为网格方块。Geohashes 是纬度和经度交织的位的 Base32 编码字符串。所以哈希值越长,它就越精确。添加到 geohash 的每个字符代表另一个树级别,并向 geohash 添加 5 位精度。geohash 代表一个矩形区域,有 32 个子矩形。Elasticsearch 中的最大级别数为 24。
  • QuadPrefixTree - 使用四叉树作为网格方块。与 geohash 类似,四叉树将纬度和经度的位交错,生成的哈希值是位集。四叉树中的树级别表示该位集中的 2 个位,每个坐标对应一个位。Elasticsearch 中四叉树的最大级别数为 50。

我不明白其中的区别,例如,如果我采取以下观点: Latitude / Longitude = 42.9123456, 21.799986 geohash 是srxs05fq8。谁能解释一下如何计算四叉树表示?

此外,什么时候选择其中一种更好?

小智 1

在 ElasticSearch 中,您可以通过将树选项设置为四叉树来选择使用四叉树

如果您想自己计算四叉树值(在 ElasticSearch 之外),我推荐使用python-geohash 模块,该模块还包含强大的四叉树实现。使用这个库,计算四叉树就像这样简单:

四边形=四叉树.编码(38.90533,-77.01965)

我创建了一个在 python 中使用四叉树库的示例

与四叉树相比,使用 geohash 有几个好处:

  • 跨语言支持。geohash 有多种语言(c、java、python、ruby、perl、javascript)的开源实现。如果您需要外部贡献者来连接您的空间数据,您可以通过 geohash 获得最大的灵活性。如果您使用 python 作为应用程序编程语言,则有一个预构建的 c 扩展可以帮助以比四叉树更快的速度计算 geohash 值。

    • 错误狩猎。Geohash 在开源社区(例如 ElasticSearch、MongoDB 等)中被广泛采用,在其系统中实现 geohash 索引作为空间索引的一种形式。如果您的数据遇到奇怪的情况,使用 geohash 找到问题(和解决方案)的几率会更高。

    • 社区。您可以通过 geohash.org 上的可共享 URL 创建将 geohash 转换为可见地图的 URL。例如,这是华盛顿特区的 URL