Skip to content
πŸŽ‰ SedonaDB 0.4.0 is out now! πŸ—ΊοΈ Python DataFrame API, R dplyr, Geography support & GPU-accelerated spatial joins. Read the release blog β†’

ST_Centroid

Introduction: Returns the spherical centroid of a geography as a Geography point, computed on the sphere using S2:

  • Polygon / MultiPolygon β€” area-weighted centroid via S2Polygon.getCentroid().
  • LineString / MultiLineString β€” length-weighted centroid via S2Polyline.getCentroid().
  • Point / MultiPoint β€” mean of the unit vectors.
  • GeographyCollection β€” recursive weighted sum across the children.

The result is the unit-length centroid on the sphere. Unlike a planar (lon/lat) centroid, it is correct for antimeridian-crossing and high-latitude geographies. As with JTS for non-convex shapes, the centroid may lie outside the input geometry. Returns NULL when the centroid is undefined (empty geometry, or antipodal points whose unit vectors cancel).

Format:

ST_Centroid (A: Geography)

Return type: Geography

Since: v1.9.1

SQL Example

SELECT ST_AsEWKT(ST_Centroid(ST_GeogFromWKT('POLYGON ((0 0, 2 0, 2 2, 0 2, 0 0))')));

Output (small O(dΒ²/RΒ²) spherical correction vs the planar (1 1)):

POINT (1 1)

For an antimeridian-crossing polygon, the spherical centroid stays on the antimeridian instead of jumping to the opposite side of the planet, which a planar centroid would do:

SELECT ST_AsEWKT(ST_Centroid(ST_GeogFromWKT('POLYGON ((170 -1, -170 -1, -170 1, 170 1, 170 -1))')));
-- result: POINT near (180, 0) (or (-180, 0)), NOT (0, 0)