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.