ST_Relate
Definition
ST_Relate vergleicht zwei Geometrien und gibt 1 (Oracle und SQLite) oder t (PostgreSQL) zurück, wenn die beiden Geometrien die Bedingungen erfüllen, die im DE-9IM-Mustermatrixstring festgelegt worden sind. Andernfalls wird 0 (Oracle und SQLite) oder f (PostgreSQL) zurückgegeben.
Syntax
Oracle und PostgreSQL
sde.st_relate (geometry1 sde.st_geometry, geometry2 sde.st_geometry, patternMatrix string)
SQLite
st_relate (geometry1 geometryblob, geometry2 geometryblob, patternMatrix string)
Rückgabetyp
Boolesch
Beispiel
Eine DE-9IM-Mustermatrix ist ein Hilfsmittel zum Vergleichen von Geometrien. Es gibt verschiedene Typen solcher Matrizen. Beispielsweise können Sie mit der Mustermatrix (T*F**FFF*) herausfinden, ob zwei beliebige Geometrien gleich sind.
In diesem Beispiel wird die Tabelle "relate_test" mit drei räumlichen Spalten erstellt, in die jeweils Punkt-Features eingefügt werden. Die ST_Relate-Funktion wird in der SELECT-Anweisung verwendet, um zu testen, ob die Punkte gleich sind. Beachten Sie, dass empfohlen wird, stattdessen die Funktion ST_Equals zu verwenden, falls Sie ermitteln möchten, ob Geometrien gleich sind.
Oracle
CREATE TABLE relate_test (
g1 sde.st_geometry,
g2 sde.st_geometry,
g3 sde.st_geometry
);
INSERT INTO relate_test (g1, g2, g3) VALUES (
sde.st_geometry ('point (10.02 20.01)', 4326),
sde.st_geometry ('point (10.02 20.01)', 4326),
sde.st_geometry ('point (30.01 20.01)', 4326)
);
SELECT sde.st_relate (g1, g2, 'T*F**FFF*') g1_equals_g2,
sde.st_relate (g1, g3, 'T*F**FFF*') g1_equals_g3,
sde.st_relate (g2, g3, 'T*F**FFF*') g2_equals_g3
FROM RELATE_TEST;
g1_equals_g2 g1_equals_g3 g2_equals_g3
1 0 0
PostgreSQL
CREATE TABLE relate_test (
g1 sde.st_geometry,
g2 sde.st_geometry,
g3 sde.st_geometry
);
INSERT INTO relate_test (g1, g2, g3) VALUES (
sde.st_geometry ('point (10.02 20.01)', 4326),
sde.st_geometry ('point (10.02 20.01)', 4326),
sde.st_geometry ('point (30.01 20.01)', 4326)
);
SELECT st_relate (g1, g2, 'T*F**FFF*') AS "g1=g2",
st_relate (g1, g3, 'T*F**FFF*') AS "g1=g3",
st_relate (g2, g3, 'T*F**FFF*') AS "g2=g3"
FROM relate_test;
g1=g2 g1=g3 g2=g3
t f f
SQLite
CREATE TABLE relate_test (id integer primary key autoincrement not null);
SELECT AddGeometryColumn(
NULL,
'relate_test',
'g1',
4326,
'point',
'xy',
'null'
);
CREATE TABLE relate_test2 (id integer primary key autoincrement not null);
SELECT AddGeometryColumn(
NULL,
'relate_test2',
'g2',
4326,
'point',
'xy',
'null'
);
CREATE TABLE relate_test3 (id integer primary key autoincrement not null);
SELECT AddGeometryColumn(
NULL,
'relate_test3',
'g3',
4326,
'point',
'xy',
'null'
);
INSERT INTO relate_test (g1) VALUES (
st_geometry ('point (10.02 20.01)', 4326)
);
INSERT INTO relate_test2 (g2) VALUES (
st_geometry ('point (10.02 20.01)', 4326)
);
INSERT INTO relate_test3 (g3) VALUES (
st_geometry ('point (30.01 20.01)', 4326)
);
SELECT st_relate (relate_test.g1, relate_test2.g2, 'T*F**FFF*') AS "g1=g2",
st_relate (relate_test.g1, relate_test3.g3, 'T*F**FFF*') AS "g1=g3",
st_relate (relate_test2.g2, relate_test3.g3, 'T*F**FFF*') AS "g2=g3"
FROM relate_test, relate_test2, relate_test3;
g1=g2 g1=g3 g2=g3
1 0 0