ST_Centroid() în MySQL

Returnează centrul de greutate (centroidul) al unui poligon sau al unei geometrii, ca punct.

Sintaxă
ST_Centroid(geometrie)

Ce face ST_Centroid()

Centroidul este „centrul de masă” al formei. Pentru o colecție, MySQL ia doar elementele cu dimensiunea cea mai mare (de exemplu doar poligoanele) și calculează centroidul lor.

Centroidul nu se află neapărat în interiorul formei (de exemplu la o formă de „C” sau la un MULTIPOLYGON). Funcția nu acceptă geometrii cu SRID geografic.

Parametri

Parametru Descriere
geometrie Un poligon, MULTIPOLYGON sau o colecție (SRID cartezian).

Ce returnează

Un POINT; NULL pentru colecția goală.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE cartiere (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  forma POLYGON NOT NULL
);

INSERT INTO cartiere VALUES
  (1, 'Centru',   ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
  (2, 'Copou',    ST_GeomFromText('POLYGON((0 4,4 4,4 8,0 8,0 4))')),
  (3, 'Tătărași', ST_GeomFromText('POLYGON((3 1,7 1,7 5,3 5,3 1))')),
  (4, 'Galata',   ST_GeomFromText('POLYGON((10 0,13 0,13 3,10 3,10 0))'));

Exemplul 1: Centrul fiecărui cartier

SELECT nume, ST_AsText(ST_Centroid(forma)) AS centru
FROM cartiere
ORDER BY id;

Rezultat

+-------------+-----------------+
| nume        | centru          |
+-------------+-----------------+
| Centru      | POINT(2 2)      |
| Copou       | POINT(2 6)      |
| Tătărași    | POINT(5 3)      |
| Galata      | POINT(11.5 1.5) |
+-------------+-----------------+

Exemplul 2: Centroid în afara formei

SET @c = ST_GeomFromText('POLYGON((0 0,6 0,6 1,1 1,1 5,6 5,6 6,0 6,0 0))');

SELECT ST_AsText(ST_Centroid(@c)) AS centroid,
       ST_Contains(@c, ST_Centroid(@c)) AS e_in_interior;

Rezultat

+----------------+---------------+
| centroid       | e_in_interior |
+----------------+---------------+
| POINT(2.375 3) |             0 |
+----------------+---------------+

Greșeli frecvente

  • Folosești centroidul ca punct de afișare a unei etichete pe hartă. Poate cădea în afara formei; verifică cu ST_Contains().

Comenzi înrudite

  • ST_Area(): Returnează aria unui poligon sau a unui MULTIPOLYGON; pentru SRID 4326, în metri pătrați.
  • ST_Envelope(): Returnează dreptunghiul minim de încadrare (MBR) al unei geometrii, ca poligon.
  • ST_Contains(): Verifică dacă prima geometrie o conține complet pe a doua (de exemplu un punct în interiorul unui poligon).