Ce face ST_Difference()
ST_Difference(g1, g2) „decupează” din g1 tot ce se suprapune cu g2. Ordinea contează: ST_Difference(a, b) nu este același lucru cu ST_Difference(b, a).
Din MySQL 8.0.26 funcția acceptă și SRID geografic.
Parametri
| Parametru | Descriere |
|---|---|
g1 |
Geometria din care se decupează. |
g2 |
Geometria decupată. |
Ce returnează
O geometrie (posibil 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: Partea din Centru care nu este în Tătărași
SELECT ST_AsText(ST_Difference(a.forma, b.forma)) AS centru_ramas,
ST_Area(ST_Difference(a.forma, b.forma)) AS arie_ramasa,
ST_Area(ST_Difference(b.forma, a.forma)) AS arie_invers
FROM cartiere a JOIN cartiere b ON a.nume = 'Centru' AND b.nume = 'Tătărași';
Rezultat
+----------------------------------------+-------------+-------------+
| centru_ramas | arie_ramasa | arie_invers |
+----------------------------------------+-------------+-------------+
| POLYGON((3 4,0 4,0 0,4 0,4 1,3 1,3 4)) | 13 | 13 |
+----------------------------------------+-------------+-------------+
Exemplul 2: Punct care nu este acoperit
SELECT ST_AsText(ST_Difference(Point(1, 1), Point(2, 2))) AS ramane,
ST_AsText(ST_Difference(Point(1, 1), Point(1, 1))) AS dispare;
Rezultat
+------------+--------------------------+
| ramane | dispare |
+------------+--------------------------+
| POINT(1 1) | GEOMETRYCOLLECTION EMPTY |
+------------+--------------------------+
Greșeli frecvente
- Inversezi argumentele. Primul argument este geometria din care tai, al doilea este „foarfeca”.
Comenzi înrudite
ST_SymDifference(): Returnează punctele care sunt într-una dintre geometrii, dar nu în amândouă (diferența simetrică).ST_Intersection(): Returnează partea comună a două geometrii (intersecția lor).ST_Union(): Unește două geometrii într-una singură (reuniunea mulțimilor de puncte).