ST_SymmetricDiff

Définition

ST_SymmetricDiff accepte deux objets ST_Geometry et renvoie un objet geometry composé des parties des objets source qui ne sont pas communes aux deux.

Syntaxe

sde.st_symmetricdiff (g1 sde.st_geometry, g2 sde.st_geometry)

Type de retour

ST_Geometry

Exemple

Pour un rapport spécial, le responsable de l'aménagement du territoire doit déterminer les surfaces des zones sensibles et des sites dangereux qui ne se coupent pas.

La table sensitive_areas contient une colonne id en plus de la colonne shape qui stocke les géométries surfaciques des institutions.

La table hazardous_sites stocke l'identité des sites dans la colonne id, tandis que l'emplacement géographique réel de chaque site est stocké dans la colonne des points de site.

CREATE TABLE sensitive_areas (id integer, 
                              shape sde.st_geometry); 

CREATE TABLE hazardous_sites (id integer, 
                              site sde.st_geometry);
INSERT INTO SENSITIVE_AREAS VALUES (
1,
sde.st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 0)
);

INSERT INTO SENSITIVE_AREAS VALUES (
2,
sde.st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 0)
);

INSERT INTO SENSITIVE_AREAS VALUES (
3,
sde.st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 0)
);

INSERT INTO HAZARDOUS_SITES VALUES (
4,
sde.st_geometry ('point (60 60)', 0)
);

INSERT INTO HAZARDOUS_SITES VALUES (
5,
sde.st_geometry ('point (30 30)', 0)
);

La fonction ST_Buffer génère une zone tampon qui entoure les points des sites de dépôt de déchets dangereux. La fonction ST_SymmetricDiff retourne les polygones des sites de dépôt de déchets dangereux placés en zone tampon et des zones sensibles qui ne se coupent pas.

Oracle

SELECT sa.id SA_ID,hs.id HS_ID,
sde.st_area (sde.st_symmetricdiff (sde.st_buffer (hs.site, .1), sa.shape)) AREA_NO_INT
FROM HAZARDOUS_SITES hs, SENSITIVE_AREAS sa
WHERE hs.id = 4;

     SA_ID    HS_ID   AREA_NO_INT

         1        4    100.031393
         2        4    400.031393
         3        4    400.015697

PostgreSQL

SELECT sa.id AS SA_ID, hs.id AS HS_ID,
sde.st_area (sde.st_symmetricdiff (sde.st_buffer (hs.site, .1), sa.shape)) AS "no intersection"
FROM hazardous_sites hs, sensitive_areas sa
WHERE hs.id = 4;

    sa_id     hs_id   no intersection

         1        4    100.031393502001
         2        4    400.031393502001
         3        4    400.01569751

La différence symétrique entre les sites de dépôt de déchets dangereux et les zones sensibles a pour résultat la soustraction des zones qui se coupent.

9/12/2013