Geo Centroid Aggregation Usageedit

A metric aggregation that computes the weighted centroid from all coordinate values for a Geo-point datatype field.

Be sure to read the Elasticsearch documentation on Geo Centroid Aggregation

a => a
.GeoCentroid("centroid", gb => gb
    .Field(p => p.Location)
)
new GeoCentroidAggregation("centroid", Infer.Field<Project>(p => p.Location))

Example json output. 

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

Handling Responsesedit

response.ShouldBeValid();
var centroid = response.Aggregations.GeoCentroid("centroid");
centroid.Should().NotBeNull();
centroid.Count.Should().BeGreaterThan(0);
centroid.Location.Should().NotBeNull();

centroid.Location.Latitude.Should().NotBe(0);
centroid.Location.Longitude.Should().NotBe(0);

Geo Centroid Sub Aggregationedit

The geo_centroid aggregation is more interesting when combined as a sub-aggregation to other bucket aggregations

a => a
.Terms("projects", t => t
    .Field(p => p.Name)
    .Aggregations(sa => sa
        .GeoCentroid("centroid", gb => gb
            .Field(p => p.Location)
        )
    )
)
new TermsAggregation("projects")
{
    Field = Infer.Field<Project>(p => p.Name),
    Aggregations = new GeoCentroidAggregation("centroid", Infer.Field<Project>(p => p.Location))
}

Example json output. 

{
  "projects": {
    "terms": {
      "field": "name"
    },
    "aggs": {
      "centroid": {
        "geo_centroid": {
          "field": "location"
        }
      }
    }
  }
}

response.ShouldBeValid();

var projects = response.Aggregations.Terms("projects");

foreach (var bucket in projects.Buckets)
{
    var centroid = bucket.GeoCentroid("centroid");
    centroid.Should().NotBeNull();
    centroid.Count.Should().BeGreaterThan(0);
    centroid.Location.Should().NotBeNull();

    centroid.Location.Latitude.Should().NotBe(0);
    centroid.Location.Longitude.Should().NotBe(0);
}
a => a
.GeoCentroid("centroid", gb => gb
    .Field(p => p.Location)
)
new GeoCentroidAggregation("centroid", Infer.Field<Project>(p => p.Location))

Example json output. 

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

response.ShouldBeValid();
var centroid = response.Aggregations.GeoCentroid("centroid");
centroid.Should().NotBeNull();
centroid.Count.Should().Be(0);