定义
ST_Relate 比较两个几何,如果几何满足 DE-9IM 模式矩阵字符串指定的条件,则返回 1(Oracle 和 SQLite)或 t (PostgreSQL);否则,返回 0(Oracle 和 SQLite)或 f (PostgreSQL)。
如果在 SQLite 中使用,在 SQLite 中使用 ST_Relate 时有第二个选项:可以比较两个几何以返回表示定义几何之间关系的 DE-9IM 模式矩阵的字符串。
语法
Oracle 和 PostgreSQL
sde.st_relate (geometry1 sde.st_geometry, geometry2 sde.st_geometry, patternMatrix string)
SQLite
选项 1
st_relate (geometry1 st_geometry, geometry2 st_geometry, patternMatrix string)
选项 2
patternMatrix string st_relate (geometry1 st_geometry, geometry2 st_geometry)
返回类型
布尔型
适用于 SQLite 的选项 2 将返回一个字符串。
示例
DE-9IM 模式矩阵是一种用于比较几何的设备。此矩阵分为多种类型。例如,相等模式矩阵 (T*F**FFF*) 将告知您任意两几何是否相等。
在这些示例中,将创建包含三个空间列的表 relate_test,每个空间列中均插入了点要素。ST_Relate 函数用于在 SELECT 语句中测试各点是否相同。请注意,如果想要确定几何是否相等,则建议使用 ST_Equals 函数。
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
该第一个示例显示第一个 ST_Relate 选项,根据 DE-9IM 模式矩阵比较两个几何,如果几何满足矩阵中定义的要求,将返回 1,如果不满足,将返回 0。
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
此示例将比较两个几何并返回 DE-9IM 模式矩阵。
SELECT st_relate (g1,g3)
FROM relate_test;
将返回以下内容:
st_relate (g1,g3) FF0FFF0F2