Ce face ST_SymDifference()
Diferența simetrică este reuniunea fără partea comună: ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2)). Spre deosebire de ST_Difference(), ordinea argumentelor nu contează.
Este utilă pentru a vedea ce s-a schimbat între două versiuni ale unei zone. Din MySQL 8.0.27 acceptă și SRID geografic.
Parametri
| Parametru | Descriere |
|---|---|
g1, g2 |
Geometriile comparate. |
Ce returnează
O geometrie (posibil goală).
Exemple
Exemplul 1: Ce s-a schimbat la zona de livrare
SET @zona_veche = ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))');
SET @zona_noua = ST_GeomFromText('POLYGON((1 0,5 0,5 4,1 4,1 0))');
SELECT ST_AsText(ST_SymDifference(@zona_veche, @zona_noua)) AS schimbari,
ST_Area(ST_SymDifference(@zona_veche, @zona_noua)) AS arie_schimbata;
Rezultat
+---------------------------------------------------------------+----------------+
| schimbari | arie_schimbata |
+---------------------------------------------------------------+----------------+
| MULTIPOLYGON(((1 4,0 4,0 0,1 0,1 4)),((4 4,4 0,5 0,5 4,4 4))) | 8 |
+---------------------------------------------------------------+----------------+
Exemplul 2: Puncte care apar într-o singură listă
SELECT ST_AsText(ST_SymDifference(
ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)'),
ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)'))) AS diferite;
Rezultat
+-------------------------+
| diferite |
+-------------------------+
| MULTIPOINT((5 0),(1 1)) |
+-------------------------+
Greșeli frecvente
- Folosești
ST_SymDifference()când vrei doar ce a dispărut. Rezultatul conține și ce a apărut; pentru o singură direcție foloseșteST_Difference().
Comenzi înrudite
ST_Difference(): Returnează partea din prima geometrie care nu se află în a doua (diferența).ST_Union(): Unește două geometrii într-una singură (reuniunea mulțimilor de puncte).ST_Equals(): Verifică dacă două geometrii reprezintă exact aceeași formă, chiar dacă sunt scrise diferit.