ST_Centroid — Returnerar den geometriska mittpunkten för en geometri.
geometry ST_Centroid(
geometry g1)
;
geography ST_Centroid(
geography g1, boolean use_spheroid = true)
;
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
]LINESTRINGs
beräknas centroiden med hjälp av den viktade längden för varje linjesegment. För [MULTI
]POLYGONER
berä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
I följande illustrationer är den röda punkten källgeometrins mittpunkt.
![]() Centroid för en |
![]() Centroid av en |
![]() Centroid av en |
![]() Centroid av en |
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)