geohash网格图_Geohash 网格聚合 | Elasticsearch: 权威指南 | Elastic

Geohash 网格聚合编辑

通过一个查询返回的结果数量对在地图上单独的显示每一个位置点而言可能太多了。

geohash_grid 按照你定义的精度计算每一个点的 geohash 值而将附近的位置聚合在一起。

结果是一个网格—一个单元格表示一个可以显示在地图上的 geohash 。通过改变 geohash 的精度,你可以按国家或者城市街区来概括全世界。

聚合是稀疏的—它 仅返回那些含有文档的单元。

如果 geohashes 太精确,将产生太多的 buckets,它将默认返回那些包含了大量文档、最密集的10000个单元。

然而,为了计算哪些是最密集的 Top10000 ,它还是需要产生 所有 的 buckets 。可以通过以下方式来控制 buckets 的产生数量:

使用 geo_bounding_box 来限制结果。

为你的边界大小选择一个适当的 precision (精度)

GET /attractions/restaurant/_search

{

"size" : 0,

"query": {

"constant_score": {

"filter": {

"geo_bounding_box": {

"location": {

"top_left": {

"lat": 40.8,

"lon": -74.1

},

"bottom_right": {

"lat": 40.4,

"lon": -73.7

}

}

}

}

}

},

"aggs": {

"new_york": {

"geohash_grid": {

"field": "location",

"precision": 5

}

}

}

}

边界框将搜索限制在大纽约区的范围

Geohashes 精度为 5 大约是 5km x 5km。

Geohashes 精度为 5 ,每个约25平方公里,所以10000个单元按这个精度将覆盖250000平方公里。我们指定的边界范围,约44km x 33km,或约1452平方公里,所以我们的边界在安全范围内;我们绝对不会在内存中创建了太多的 buckets。

前面的请求响应看起来是这样的:

...

"aggregations": {

"new_york": {

"buckets": [

{

"key": "dr5rs",

"doc_count": 2

},

{

"key": "dr5re",

"doc_count": 1

}

]

}

}

...

每个 bucket 包含作为 key 的 geohash 值

同样,我们也没有指定任何子聚合,所以我们得到是文档计数。如果需要,我们也可以了解这些 buckets 中受欢迎的餐厅类型、平均价格或其他细节。

要在地图上绘制这些 buckets,你需要一个将 geohash 转换成同等边界框或中心点的库。JavaScript 和其他语言已有的库会为你执行这个转换,但你也可以从使用 geo-bounds-agg 的信息来进行类似的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值