iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
Elastic Stack on Cloud

Python&Elasticsearch 入門系列 第 25

IT鐵人第25天 Elasticsearch 使用python查詢資料 Aggregations:Geo Bounds/Geo Centroid

今天的文章要介紹的是Geo Bounds(地理邊界經緯度)以及Geo Centroid(地理質心經緯度)

今天使用官方文件的資料進行測試
https://ithelp.ithome.com.tw/upload/images/20201007/20129976B9sRFbl1E3.png

Geo Bounds

這種聚合方式會返回包含兩個點的經緯度,左上(top_left)及右下(bottom_right),這兩點所圍成的框框會包含符合字段的所有經緯度
可調參數wrap_longitude:是否允許邊界框與國際日期線重疊,預設為true

aggs query:

{
  "aggs": {
    "stats": {
      "geo_bounds": {
        "field": "location",
        "wrap_longitude": true
      }
    }
  }
}

結果:

"aggregations" : {
  "stats" : {
    "bounds" : {
      "top_left" : {
        "lat" : 52.374080987647176,
        "lon" : 2.3269999679178
      },
      "bottom_right" : {
        "lat" : 48.85999997612089,
        "lon" : 4.91472196765244
      }
    }
  }
}

Geo Centroid

這種聚合方式會返回一個點的經緯度,返回的點代表的是包含字段的地理座標的質心,有點類似中心點

aggs query:

{
  "aggs": {
    "centroid": {
      "geo_centroid": {
        "field": "location" 
      }
    }
  }
}

結果:

"aggregations" : {
  "centroid" : {
    "location" : {
      "lat" : 51.00982965203002,
      "lon" : 3.9662131341174245
    },
    "count" : 6
  }
}

計算城市的中心地理位置
aggs query:

{
  "aggs": {
    "cities": {
      "terms": { "field": "city" },
      "aggs": {
        "centroid": {
          "geo_centroid": { "field": "location" }
        }
      }
    }
  }
}

結果:

"aggregations" : {
  "cities" : {
    "doc_count_error_upper_bound" : 0,
    "sum_other_doc_count" : 0,
    "buckets" : [
      {
        "key" : "Amsterdam",
        "doc_count" : 3,
        "centroid" : {
          "location" : {
            "lat" : 52.371655656024814,
            "lon" : 4.909563297405839
          },
          "count" : 3
        }
      },
      {
        "key" : "Paris",
        "doc_count" : 2,
        "centroid" : {
          "location" : {
            "lat" : 48.86055548675358,
            "lon" : 2.3316944623366
          },
          "count" : 2
        }
      },
      {
        "key" : "Antwerp",
        "doc_count" : 1,
        "centroid" : {
          "location" : {
            "lat" : 51.22289997059852,
            "lon" : 4.40519998781383
          },
          "count" : 1
        }
      }
    ]
  }
}

今天文章就到這邊,謝謝大家


上一篇
IT鐵人第24天 Elasticsearch 使用python查詢資料 Aggregations:Stats/Extended Stats
下一篇
IT鐵人第26天 Elasticsearch 使用python查詢資料 Aggregations:Max/Min
系列文
Python&Elasticsearch 入門30

尚未有邦友留言

立即登入留言