Geo Bounds Aggregation Usageedit

Fluent DSL exampleedit

s => s
.Aggregations(a => a
    .GeoBounds("viewport", gb => gb
        .Field(p => p.Location)
        .WrapLongitude(true)
    )
)

Object Initializer syntax exampleedit

new SearchRequest<Project>
{
    Aggregations = new GeoBoundsAggregation("viewport", Field<Project>(p => p.Location))
    {
        WrapLongitude = true
    }
}

Example json output. 

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

Handling Responsesedit

response.ShouldBeValid();
var viewport = response.Aggs.GeoBounds("viewport");
viewport.Should().NotBeNull();
viewport.Bounds.Should().NotBeNull();

var bottomRight = viewport.Bounds.BottomRight;
bottomRight.Should().NotBeNull();
bottomRight.Lat.Should().HaveValue();
GeoLocation.IsValidLatitude(bottomRight.Lat.Value).Should().BeTrue();
bottomRight.Lon.Should().HaveValue();
GeoLocation.IsValidLongitude(bottomRight.Lon.Value).Should().BeTrue();

var topLeft = viewport.Bounds.TopLeft;
topLeft.Should().NotBeNull();
topLeft.Lat.Should().HaveValue();
GeoLocation.IsValidLatitude(topLeft.Lat.Value).Should().BeTrue();
topLeft.Lon.Should().HaveValue();
GeoLocation.IsValidLongitude(topLeft.Lon.Value).Should().BeTrue();