Definition
ST_SymmetricDiff takes two geometry objects and returns a geometry object composed of the parts of the source objects that are not common to both.
Syntax
Oracle and PostgreSQL
sde.st_symmetricdiff (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_symmetricdiff (geometry1 geometryblob, geometry2 geometryblob)
Return type
Oracle and PostgreSQL
ST_Geometry
SQLite
Geometryblob
Example
For a special report, the county supervisor must determine the watershed and hazardous plumes radii areas that aren't intersected.
The watershed table contains an id column, a column to store the watershed name (wname), and a shape column, which stores the watershed area geometry.
The plumes table stores the identity of the site in the id column, while the actual geographic location of each site is stored in the site point column.
The ST_Buffer function generates a buffer surrounding the hazardous waste site points. The ST_SymmetricDiff function returns the polygons of the buffered hazardous waste sites and the watersheds that don't intersect.
The symmetric difference of the hazardous waste sites and the watershed results in the subtraction of the intersected areas.
Oracle
CREATE TABLE watershed (
id integer,
wname varchar(40),
shape sde.st_geometry
);
CREATE TABLE plumes (
id integer,
site sde.st_geometry
);
INSERT INTO WATERSHED (ID, WNAME, SHAPE) VALUES (
1,
'Big River',
sde.st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO WATERSHED (ID, WNAME, SHAPE) VALUES (
2,
'Lost Creek',
sde.st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO WATERSHED (ID, WNAME, SHAPE) VALUES (
3,
'Szymborska Stream',
sde.st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO PLUMES (ID, SITE) VALUES (
20,
sde.st_geometry ('point (60 60)', 4326)
);
INSERT INTO PLUMES (ID, SITE) VALUES (
21,
sde.st_geometry ('point (30 30)', 4326)
);
SELECT ws.id WS_ID,
sde.st_area (sde.st_symmetricdiff (sde.st_buffer (p.site, .1), ws.shape)) AREA_NO_INT
FROM PLUMES p, WATERSHED ws
WHERE p.id = 20;
SA_ID AREA_NO_INT
1 100.031393
2 400.031393
3 400.015697
PostgreSQL
CREATE TABLE watershed (
id serial,
wname varchar(40),
shape sde.st_geometry
);
CREATE TABLE plumes (
id serial,
site sde.st_geometry
);
INSERT INTO watershed (wname, shape) VALUES (
'Big River',
sde.st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO watershed (wname, shape) VALUES (
'Lost Creek',
sde.st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO watershed (wname, shape) VALUES (
'Szymborska Stream',
sde.st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO plumes (site) VALUES (
sde.st_geometry ('point (60 60)', 4326)
);
INSERT INTO plumes (site) VALUES (
sde.st_geometry ('point (30 30)', 4326)
);
SELECT ws.id AS WS_ID,
sde.st_area (sde.st_symmetricdiff (sde.st_buffer (p.site, .1), ws.shape)) AS "no intersection"
FROM plumes p, watershed ws
WHERE p.id = 1;
ws_id no intersection
1 100.031393502001
2 400.031393502001
3 400.01569751
SQLite
CREATE TABLE watershed (
id integer primary key autoincrement not null,
wname text(40)
);
SELECT AddGeometryColumn(
NULL,
'watershed',
'shape',
4326,
'polygon',
'xy',
'null'
);
CREATE TABLE plumes (
id integer primary key autoincrement not null
);
SELECT AddGeometryColumn(
NULL,
'plumes',
'site',
4326,
'point',
'xy',
'null'
);
INSERT INTO watershed (wname, shape) VALUES (
'Big River',
st_geometry ('polygon ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO watershed (wname, shape) VALUES (
'Lost Creek',
st_geometry ('polygon ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO watershed (wname, shape) VALUES (
'Szymborska Stream',
st_geometry ('polygon ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO plumes (site) VALUES (
st_geometry ('point (60 60)', 4326)
);
INSERT INTO plumes (site) VALUES (
st_geometry ('point (30 30)', 4326)
);
SELECT ws.id AS WS_ID,
st_area (st_symmetricdiff (st_buffer (p.site, .1), ws.shape)) AS "no intersection"
FROM plumes p, watershed ws
WHERE p.id = 1;
WS_ID no intersection
1 400.031393502001
2 100.031393502001
3 400.01569751