Link Search Menu Expand Document Documentation Menu

地理边界聚合

geo_bounds 聚合是一种多值聚合,用于计算包含一组 geo_pointgeo_shape 对象的地理边界框。边界框以矩形的左上角和右下角顶点返回,表示为十进制编码的纬度-经度(lat-lon)对。

参数

geo_bounds 聚合接受以下参数。

参数 必需/可选 数据类型 描述
field 必需 字符串 包含用于计算地理边界的地理点或地理形状的字段名称。
wrap_longitude 可选 布尔型 是否允许边界框与国际日期变更线重叠。默认为 true

示例

以下示例返回电子商务示例数据中每个订单的 geoip.location(每个 geoip.location 都是一个地理点)的 geo_bounds

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "geo": {
      "geo_bounds": {
        "field": "geoip.location"
      }
    }
  }
}

示例响应

如以下示例响应所示,该聚合返回包含 geoip.location 字段中所有地理点的 geobounds

{
  "took": 16,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4675,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "geo": {
      "bounds": {
        "top_left": {
          "lat": 52.49999997206032,
          "lon": -118.20000001229346
        },
        "bottom_right": {
          "lat": 4.599999985657632,
          "lon": 55.299999956041574
        }
      }
    }
  }
}

聚合地理形状

你可以在地理形状上运行 geo_bounds 聚合。

通过插入包含地理形状字段的索引来准备一个示例。

PUT national_parks
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_shape"
      }
    }
  }
}

将文档摄取到索引中。GeoJSON 输入首先指定经度。

POST _bulk
{ "create": { "_index": "national_parks", "_id": "1" } }
{"name": "Yellowstone National Park", "location": {"type": "envelope","coordinates": [ [-111.15, 45.12], [-109.83, 44.12] ]}}
{ "create": { "_index": "national_parks", "_id": "2" } }
{ "name": "Yosemite National Park", "location": {"type": "envelope","coordinates": [ [-120.23, 38.16], [-119.05, 37.45] ]} }
{ "create": { "_index": "national_parks", "_id": "3" } }
{ "name": "Death Valley National Park", "location": {"type": "envelope","coordinates": [ [-117.34, 37.01], [-116.38, 36.25] ]} }
{ "create": { "_index": "national_parks", "_id": "4" } }
{ "name": "War In The Pacific National Historic Park Guam", "location": {"type": "point","coordinates": [144.72, 13.47]} }

location 字段运行 geo_bounds 聚合。

GET national_parks/_search
{
  "size": 0,
  "aggregations": {
    "grouped": {
      "geo_bounds": {
        "field": "location",
        "wrap_longitude": true
      }
    }
  }
}

响应包含包围 location 字段中所有形状的最小地理边界框。

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "grouped": {
      "bounds": {
        "top_left": {
          "lat": 45.11999997776002,
          "lon": 144.71999991685152
        },
        "bottom_right": {
          "lat": 13.469999986700714,
          "lon": -109.83000006526709
        }
      }
    }
  }
}

经度环绕

如果可选的 wrap_longitude 参数设置为 true,则边界框可以与国际日期变更线(180° 经线)重叠,并返回一个 bounds 对象,其中左上角经度大于右下角经度。wrap_longitude 的默认值为 true

使用 wrap_longitude 设置为 false,重新运行国家公园地理形状上的 geo_bounds 聚合。

GET national_parks/_search
{
  "size": 0,
  "aggregations": {
    "grouped": {
      "geo_bounds": {
        "field": "location",
        "wrap_longitude": false
      }
    }
  }
}

请注意,新的结果地理边界包含更大的区域,以避免与日期变更线重叠。

{
...
  "aggregations": {
    "grouped": {
      "bounds": {
        "top_left": {
          "lat": 45.11999997776002,
          "lon": -120.23000006563962
        },
        "bottom_right": {
          "lat": 13.469999986700714,
          "lon": 144.71999991685152
        }
      }
    }
  }
}

OpenSearch 通过 API 支持地理形状聚合,但在 OpenSearch Dashboards 可视化中不支持。

剩余 350 字符

有问题?

想做贡献?