elasticsearch ElasticSearch QuadPrefixTree与GeohashPrefixTree
我是ElasticSearch的新手,我想了解使用Geohash和四叉树之间的区别。书中写道:
elasticsearch ElasticSearch QuadPrefixTree与GeohashPrefixTree,
elasticsearch,geospatial,spatial,quadtree,
elasticsearch,Geospatial,Spatial,Quadtree,我是ElasticSearch的新手,我想了解使用Geohash和四叉树之间的区别。书中写道: GeohashPrefixTree-将GeoHash用于网格正方形。Geohash是经纬度交织位的base32编码字符串。所以散列越长,越精确。添加到geohash的每个字符表示另一个树级别,并向geohash添加5位精度。geohash表示一个矩形区域,有32个子矩形。Elasticsearch中的最大级别数为24 QuadPrefixTree-对网格正方形使用四叉树。与geohash类似,四叉树
- GeohashPrefixTree-将GeoHash用于网格正方形。Geohash是经纬度交织位的base32编码字符串。所以散列越长,越精确。添加到geohash的每个字符表示另一个树级别,并向geohash添加5位精度。geohash表示一个矩形区域,有32个子矩形。Elasticsearch中的最大级别数为24
- QuadPrefixTree-对网格正方形使用四叉树。与geohash类似,四叉树将纬度和经度的位交织在一起,得到的哈希是一个位集。四叉树中的树级表示该位集中的2位,每个坐标对应一位。Elasticsearch中四叉树的最大级别数为50
此外,什么时候更喜欢一个而不是另一个 在ElasticSearch中,您可以通过 如果您想自己计算四叉树值(在ElasticSearch之外),我建议使用,它还包括一个健壮的四叉树实现。使用此库,计算四叉树非常简单: quad=quadtree.encode(38.90533,-77.01965) 我已经创建了一个使用 在四叉树上使用geohash有几个好处:
- 跨语言支持。geohash有多种语言(c、java、python、ruby、perl、javascript)的开源实现。如果您需要外部贡献者来连接您的空间数据,您可以使用geohash获得最大的灵活性。如果您使用python作为应用程序编程语言,那么有一个预构建的c扩展,可以帮助您以比四叉树更快的速度计算geohash值
- 虫子搜索。Geohash在开源社区(如ElasticSearch、MongoDB等)中被广泛采用,它将Geohash索引作为空间索引的一种形式在其系统中实现。如果您的数据遇到了一些奇怪的问题,那么使用geohash发现问题(和解决方案)的几率会更高
- 社区。您可以通过geohash.org上的可共享URL创建将geohash转换为可见地图的URL。例如,这里有一个
因此,如果您呈现的是用户可以调整分辨率的热图,quadtree将提供一个更平滑的界面,因为用户将知道,正方形的宽度和高度将在每个级别递增/递减2倍。Geohash是一个整数,因此您可以转换为任何其他基准。。。Geohash的层次结构基于递归的4区域分割,因此表示simmetric结构(具有可预测几何体)的正确基是base4。Geohash本身就是一种四叉树:参见“点四叉树”或“点区域四叉树”更广泛的概念。