首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于弹性搜索的地理空间标记聚类

基于弹性搜索的地理空间标记聚类
EN

Stack Overflow用户
提问于 2013-04-09 15:59:45
回答 2查看 4.3K关注 0票数 5

我在elasticsearch索引中有几十万个文档,其中包含相关的纬度和经度(存储为geo_point类型)。我希望能够创建一个如下所示的地图可视化:http://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.388.html

因此,我想我想要的是使用一个边界框(即用户正在查看的地图边界)运行一个查询,并在这个边界框中返回集群的摘要。在elasticsearch中有一个很好的方法来完成这个任务吗?一种新的索引策略?像geohashes这样的东西可以工作,但是它会将事物聚集成一个矩形网格,而不是基于点密度的任意多边形,如上面的例子所示。

@kumetix -好问题。我在这里回应你的评论,因为文本太长,无法再发表评论。geohash_precision设置将规定地理哈希聚合返回的最大精度。例如,如果将geohash_precision设置为8,我们最多可以在该字段上运行地理哈希聚合,最多可以精确到8。根据参考文献,这将返回分组在地理哈希框中的结果,大小约为38.2m×19m。7或8的精度可能足以显示基于web的热图,就像我在上面的例子中提到的那样。

至于geohash_precision如何影响集群内部,我猜该设置在geo_point中存储长度为<= geohash_precision的地理哈希字符串。假设我们在自由女神像上说得有道理: 40.6892,-74.0444。它的geohash12是: dr5r7p4xb2ts。在geohash_precision中将geo_point设置为8将在内部存储字符串:d dr dr5 dr5r dr5r7 dr5r7p dr5r7p4 dr5r7p4x

另外,12的geohash_precision将在内部存储字符串: dr5r7p4xb dr5r7p4xb2 dr5r7p4xb2t dr5r7p4xb2ts。

这样,每个geo_point的存储开销就会增加一点。将geohash_precision设置为距离值(1km、1m等)可能只是将其存储在最近的地理哈希字符串长度精度值中。

注:如何使用python计算geohashes

代码语言:javascript
复制
$ pip install python-geohash
>>> import geohash
>>> geohash.encode(40.6892,-74.0444)
'dr5r7p4xb2ts'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-04 10:58:47

在ElasticSearch1.0中,可以使用新的Geo散列网格聚合。

像geohashes这样的东西可以工作,但是它会将事物聚集成一个矩形网格,而不是基于点密度的任意多边形,如上面的例子所示。

这是真的,但是Geo散列网格聚合很好地处理稀疏数据,所以您所需要的只是网格上的足够点,您可以实现与地图中的示例非常相似的功能。

票数 4
EN

Stack Overflow用户

发布于 2014-08-19 09:50:30

试试这个:

https://github.com/triforkams/geohash-facet

我们一直在使用它来进行服务器端集群,而且非常好。

示例查询:

代码语言:javascript
复制
GET /things/thing/_search
{
  "size": 0,
  "query": {
        "filtered": {
            "filter": {
                "geo_bounding_box": {
                    "Location"
                    : {
                        "top_left": {
                            "lat": 45.274886437048941,
                            "lon": -34.453125
                        },
                        "bottom_right": {
                            "lat": -35.317366329237856,
                            "lon": 1.845703125
                        }
                    }
                }
            }
        }
    },
    "facets": {
      "places": {
        "geohash": {
          "field": "Location",
          "factor": 0.85
        }
      }

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15906837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档