Name

ST_Centroid — Returnerar den geometriska mittpunkten för en geometri.

Synopsis

geometry ST_Centroid(geometry g1);

geography ST_Centroid(geography g1, boolean use_spheroid = true);

Beskrivning

Beräknar en punkt som är den geometriska tyngdpunkten för en geometri. För[MULTI]POINTsär centroiden det aritmetiska medelvärdet av de inmatade koordinaterna. För [MULTI]LINESTRINGsberäknas centroiden med hjälp av den viktade längden för varje linjesegment. För [MULTI]POLYGONERberäknas centroiden i termer av area. Om en tom geometri anges, returneras en tom GEOMETRYCOLLECTION. Om NULL anges, returneras NULL. Om CIRCULARSTRING eller COMPOUNDCURVE anges konverteras de till linestring med CurveToLine först, sedan på samma sätt som för LINESTRING

För indata med blandade dimensioner är resultatet lika med centroiden för komponentgeometrierna med den högsta dimensionen (eftersom geometrierna med lägre dimension bidrar med noll "vikt" till centroiden).

Observera att för polygonala geometrier behöver centroiden inte nödvändigtvis ligga i polygonens inre. Se t.ex. diagrammet nedan över centroiden i en C-formad polygon. För att konstruera en punkt som garanterat ligger i det inre av en polygon används ST_PointOnSurface.

Nytt i 2.3.0 : stödjer CIRCULARSTRING och COMPOUNDCURVE (med CurveToLine)

Tillgänglighet: 2.4.0 stöd för geografi infördes.

Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1.

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 8.1.4, 9.5.5

Exempel

I följande illustrationer är den röda punkten källgeometrins mittpunkt.

Centroid för en MULTIPOINT

Centroid av en LINESTRIPNING

Centroid av en POLYGON

Centroid av en GEOMETRYSK COLLECTION

SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )'));
                st_astext
------------------------------------------
 POINT(2.30769230769231 3.30769230769231)
(1 row)

SELECT ST_AsText(ST_centroid(g))
FROM  ST_GeomFromText('CIRCULARSTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)')  AS g ;
------------------------------------------
POINT(0.5 1)


SELECT ST_AsText(ST_centroid(g))
FROM  ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 2, -1 1,0 0),(0 0, 0.5 0, 1 0),CIRCULARSTRING( 1 0, 2 1, 1 2),(1 2, 0.5 2, 0 2))' ) AS g;
------------------------------------------
POINT(0.5 1)