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.