ST_Union() în MySQL

Operații spațiale MySQL 5.6+

Unește două geometrii într-una singură (reuniunea mulțimilor de puncte).

Sintaxă
ST_Union(g1, g2)

Ce face ST_Union()

ST_Union() returnează toate punctele care sunt în prima sau în a doua geometrie. Două poligoane vecine devin un singur poligon, iar două linii care se încrucișează devin un MULTILINESTRING.

Ambele argumente trebuie să aibă același SRID. Din MySQL 8.0.26 funcția acceptă și SRID geografic. Pentru a uni mai multe rânduri dintr-un tabel, poți strânge geometriile cu ST_Collect().

Parametri

Parametru Descriere
g1, g2 Geometriile unite.

Ce returnează

O geometrie (tipul depinde de rezultat).

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: Centru și Copou devin un singur sector

SELECT ST_AsText(ST_Union(a.forma, b.forma)) AS sector,
       ST_Area(ST_Union(a.forma, b.forma)) AS arie
FROM cartiere a JOIN cartiere b ON a.nume = 'Centru' AND b.nume = 'Copou';

Rezultat

+------------------------------------+------+
| sector                             | arie |
+------------------------------------+------+
| POLYGON((0 8,0 0,4 0,4 4,4 8,0 8)) |   32 |
+------------------------------------+------+

Exemplul 2: Aria comună nu se numără de două ori

SELECT ST_Area(a.forma) + ST_Area(b.forma) AS suma_ariilor,
       ST_Area(ST_Union(a.forma, b.forma)) AS arie_reuniune
FROM cartiere a JOIN cartiere b ON a.nume = 'Centru' AND b.nume = 'Tătărași';

Rezultat

+--------------+---------------+
| suma_ariilor | arie_reuniune |
+--------------+---------------+
|           32 |            29 |
+--------------+---------------+

Greșeli frecvente

  • Aduni ariile a două zone care se suprapun. Partea comună se numără de două ori; calculează aria reuniunii.

Comenzi înrudite

  • ST_Intersection(): Returnează partea comună a două geometrii (intersecția lor).
  • ST_Difference(): Returnează partea din prima geometrie care nu se află în a doua (diferența).
  • ST_Collect(): Funcție de agregare: strânge geometriile din mai multe rânduri într-o singură geometrie Multi sau colecție.