Définition
ST_Relate compare deux géométries et renvoie 1 (Oracle et SQLite) ou t (PostgreSQL) si les géométries remplissent les conditions spécifiées par la chaîne de matrice modèle DE-9IM ; sinon, 0 (Oracle et SQLite) ou f (PostgreSQL) est renvoyé.
Une deuxième option est disponible lors de l'utilisation de ST_Relate dans SQLite : vous pouvez comparer deux géométries pour renvoyer une chaîne représentant la matrice modèle DE-9IM qui définit la relation des géométries entre elles.
Syntaxe
Oracle et PostgreSQL
sde.st_relate (geometry1 sde.st_geometry, geometry2 sde.st_geometry, patternMatrix string)
SQLite
Option 1
st_relate (geometry1 st_geometry, geometry2 st_geometry, patternMatrix string)
Option 2
patternMatrix string st_relate (geometry1 st_geometry, geometry2 st_geometry)
Type de retour
Booléen
L'option 2 pour SQLite renvoie une chaîne.
Exemples
Une matrice modèle DE-9IM est un périphérique permettant de comparer des géométries. Il en existe plusieurs types. Par exemple, la matrice modèle d'égalité (T*F**FFF*) vous dira si deux géométries sont égales.
Dans ces exemples, une table relate_test est créée avec trois colonnes spatiales et des entités ponctuelles sont insérées dans chacune d'entre elles. La fonction ST_Relate est utilisée dans l'instruction SELECT pour savoir si les points sont égaux. Notez que si vous savez que vous voulez déterminer si les géométries sont égales, il est recommandé d'utiliser la fonction ST_Equals à la place.
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;
Renvoie ce qui suit :
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;
Renvoie ce qui suit :
g1=g2 g1=g3 g2=g3 t f f
SQLite
Le premier exemple illustre la première option ST_Relate, qui compare deux géométries en fonction d'une matrice modèle DE-9IM pour renvoyer 1 si les géométries répondent aux critères définis dans la matrice ou 0 si les géométries n'y répondent pas.
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;
Renvoie ce qui suit :
g1=g2 g1=g3 g2=g3 1 0 0
Cet exemple compare deux géométries et renvoie la matrice modèle DE-9IM.
SELECT st_relate (g1,g3)
FROM relate_test;
Renvoie ce qui suit :
st_relate (g1,g3) FF0FFF0F2