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 plusieurs colonnes qui décrivent les institutions menacées en plus de la colonne de zone, qui stocke les géométries ST_Polygon des institutions.

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

Oracle

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

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

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

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

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

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

La fonction ST_Buffer génère une zone tampon qui entoure les emplacements 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.location, .1), sa.zone)) 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.location, .1), sa.zone)) AS "no intersection"
FROM hazardous_sites hs, sensitive_areas sa
WHERE hs.id = 4;

    sa_id   sa_id   no intersection

         1        4    100.031393
         2        4    400.031393
         3        4    400.015697

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.


7/10/2012