【问题标题】:ElasticSearch QuadPrefixTree vs GeohashPrefixTreeElasticSearch QuadPrefixTree vs GeohashPrefixTree
【发布时间】:2015-05-12 05:36:59
【问题描述】:

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

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

我不明白其中的区别,例如,如果我明白这一点: 纬度/经度 = 42.9123456, 21.799986 geohash 是 srxs05fq8。 谁能解释我如何计算四叉树表示?

此外,什么时候更喜欢一个比另一个更好?

【问题讨论】:

  • Geohash 本身是一种四叉树:参见“点四叉树”或“点区域四叉树”更广泛的概念。

标签: elasticsearch geospatial spatial quadtree


【解决方案1】:

在 ElasticSearch 中,您可以通过 setting the tree option to quadtree 选择使用四叉树

如果您想自己计算四叉树值(在 ElasticSearch 之外),我建议您使用 python-geohash module,它还包括一个健壮的四叉树实现。有了这个库,计算四叉树就很简单了:

quad = quadtree.encode(38.90533, -77.01965)

我创建了一个使用 quadtree library in python 的示例

在四叉树上使用 geohash 有几个好处:

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

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

    • 社区。您可以通过 geohash.org 上的可共享 URL 创建将 geohash 转换为可见地图的 URL。例如,这是Washington, DC的网址

【讨论】:

    【解决方案2】:

    可以实现四叉树以更精确地交织位,四叉树几乎相同。 geohash 将具有可变精度的特殊变量字符串标识符添加到数据结构中。两种方法都通过交错位来使用 z 阶空间填充曲线。将坐标转换为二进制并交错。将其视为以 4 为底的数字。

    【讨论】:

      【解决方案3】:

      四叉树更容易预测,因为每个级别都跨越一个正方形,而在 geohash 表示中,有时正方形有时会跨越矩形。

      请参阅:geohashquadtree

      因此,如果您要呈现用户可以调整分辨率的热图,四叉树将提供更平滑的界面,因为用户会知道正方形的宽度和高度将在每个级别增加/减少 2 倍/递减。

      【讨论】:

      • Geohash 是一个base32 整数,因此您可以转换为任何其他基数... Geohash 的层次结构基于递归的 4 区域拆分,因此表示 simetric 结构(具有可预测几何)的正确基数是 base4。见geohash4
      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2014-06-20
      相关资源
      最近更新 更多