ST_SymmetricDiff
Definition
ST_SymmetricDiff wählt zwei Geometrieobjekte aus und gibt ein Geometrieobjekt zurück, das aus den Teilen der Quellobjekte besteht, die nicht Teil der Schnittmenge der beiden Geometrien sind.
Syntax
Oracle und PostgreSQL
sde.st_symmetricdiff (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_symmetricdiff (geometry1 geometryblob, geometry2 geometryblob)
Rückgabetyp
Oracle und PostgreSQL
ST_Geometry
SQLite
Geometryblob
Beispiel
Für einen Sonderbericht muss der Feuerwehrchef eines Landkreises die sich nicht schneidenden Flächen im Radius der Wassereinzugsgebiete und im Radius gefährlicher Abgase ermitteln.
Die Tabelle für Wassereinzugsgebiete enthält eine ID-Spalte, eine Spalte, in der der Name des Wassereinzugsgebiets (wname) gespeichert ist, und eine Shape-Spalte, in der die Flächengeometrie des Wassereinzugsgebiets gespeichert ist.
In der Tabelle für Abgase wird die Kennung des Standorts in der Spalte "id" und die geographische Lage der einzelnen Standorte in der Spalte "site point" gespeichert.
Die Funktion ST_Buffer generiert einen Puffer um die Sondermülldeponien. Die Funktion "ST_SymmetricDiff" gibt die Polygone des Pufferradius von Sondermülldeponien und die Wassereinzugsgebiete zurück, die sich nicht schneiden.
Die symmetrische Differenz von Sondermülldeponien und Wassereinzugsgebieten resultiert in der Subtraktion der sich überschneidenden Bereiche.
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, SENSITIVE_AREAS 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 (
20,
sde.st_geometry ('point (60 60)', 4326)
);
INSERT INTO plumes (site) VALUES (
21,
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 = 20;
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 = 2;
WS_ID no intersection
1 400.031393502001
2 100.031393502001
3 400.01569751