説明
ST_Relate は、2 つのジオメトリを比較し、ジオメトリが DE-9IM のパターン マトリックス文字列で指定された条件を満たす場合は 1 (Oracle および SQLite) または t (PostgreSQL) を返します。それ以外の場合は 0 (Oracle および SQLite) または f (PostgreSQL) を返します。
SQLite で ST_Relate を使用する場合、2 番目のオプションがあります。そのオプションでは、2 つのジオメトリを比較し、ジオメトリ間のリレーションシップを定義する 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*) は、2 つのジオメトリが等しいかどうかを判定します。
これらの例では、3 つの空間列を持つ relate_test テーブルを作成し、各列にポイント フィーチャを挿入します。SELECT ステートメントの中で、ポイントが等しいかどうかをテストするために ST_Relate 関数が使用されます。ジオメトリが等しいかどうかを判定する場合は、代わりに 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
最初の例は、1 番目の ST_Relate オプションを示します。この例では、DE-9IM のパターン マトリックスに基づいて 2 つのジオメトリを比較し、ジオメトリがマトリックスで定義された要件を満たしている場合に 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
この例は、2 つのジオメトリを比較し、DE-9IM のパターン マトリックスを返します。
SELECT st_relate (g1,g3)
FROM relate_test;
次の値を返します。
st_relate (g1,g3) FF0FFF0F2