ST_Relate

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é.

Syntaxe

Oracle et PostgreSQL

sde.st_relate (geometry1 sde.st_geometry, geometry2 sde.st_geometry, patternMatrix string)

SQLite

st_relate (geometry1 geometryblob, geometry2 geometryblob, patternMatrix string)

Type de retour

Booléen

Exemple

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 cet exemple, 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 tester 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;
 
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

Thèmes connexes

5/10/2014