ST_SymDifference() în MySQL

Operații spațiale MySQL 5.6+

Returnează punctele care sunt într-una dintre geometrii, dar nu în amândouă (diferența simetrică).

Sintaxă
ST_SymDifference(g1, g2)

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ște ST_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.