地理边界聚合
geo_bounds
聚合是一种多值聚合,用于计算包含一组 geo_point
或 geo_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 可视化中不支持。