Link Search Menu Expand Document Documentation Menu

You're viewing version 2.19 of the OpenSearch documentation. For the latest version, see the current documentation. For information about OpenSearch version maintenance, see Release Schedule and Maintenance Policy.

Geobounds aggregation

The geo_bounds aggregation is a multi-value aggregation that calculates the geographic bounding box encompassing a set of geo_point or geo_shape objects. The bounding box is returned as the upper-left and lower-right vertices of the rectangle given as a decimal-encoded latitude-longitude (lat-lon) pair.

Parameters

The geo_bounds aggregation takes the following parameters.

Parameter Required/Optional Data type Description
field Required String The name of the field containing the geopoints or geoshapes for which the geobounds are computed.
wrap_longitude Optional Boolean Whether to allow the bounding box to overlap the international date line. Default is true.

Example

The following example returns the geo_bounds for the geoip.location of every order in the e-commerce sample data (each geoip.location is a geopoint):

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

Example response

As shown in the following example response, the aggregation returns the geobounds containing all geopoints in the geoip.location field:

{
  "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
        }
      }
    }
  }
}

Aggregating geoshapes

You can run a geo_bounds aggregation on geoshapes.

Prepare an example by inserting an index containing a geoshape field:

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

Ingest documents into the index. GeoJSON input specifies longitude first:

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]} }

Run a geo_bounds aggregation on the location field:

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

The response contains the smallest geo-bounding box that encloses all shapes in the location field:

{
  "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
        }
      }
    }
  }
}

Wrapping longitude

If the optional wrap_longitude parameter is set to true, the bounding box can overlap the international date line (180° meridian) and return a bounds object in which the upper-left longitude is greater than the lower-right longitude. The default value for wrap_longitude is true.

Rerun the geo_bounds aggregation on the national parks geoshape with wrap_longitude set to false:

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

Note that the new resulting geobound encompasses a larger area to avoid overlapping the dateline:

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

OpenSearch supports geoshape aggregation through the API but not in OpenSearch Dashboards visualizations.

350 characters left

Have a question? .

Want to contribute? or .