Definición
ST_Relate compara dos geometrías y devuelve 1 (Oracle y SQLite) o t (PostgreSQL) si las geometrías cumplen las condiciones especificadas por la cadena de caracteres de la matriz de patrón DE-9IM; de lo contrario, devuelve 0 (Oracle y SQLite) o f (PostgreSQL).
Cuando se utiliza en SQLite, existe una segunda opción al utilizar ST_Relate en SQLite: puede comparar dos geometrías para obtener una cadena de caracteres que represente la matriz de patrón DE-9IM que defina la relación de las geometrías entre sí.
Sintaxis
Oracle y PostgreSQL
sde.st_relate (geometry1 sde.st_geometry, geometry2 sde.st_geometry, patternMatrix string)
SQLite
Opción 1
st_relate (geometry1 st_geometry, geometry2 st_geometry, patternMatrix string)
Opción 2
patternMatrix string st_relate (geometry1 st_geometry, geometry2 st_geometry)
Tipo de devolución
Booleano
La opción 2 para SQLite devuelve una cadena de caracteres.
Ejemplos
Una matriz de patrón DE-9IM es un dispositivo para comparar geometrías. Hay varios tipos de matrices de este tipo. Por ejemplo, la matriz de patrón igual (T*F**FFF*) le dirá si alguna de las dos geometrías es igual.
En estos ejemplos, se crea una tabla, relate_test, con tres columnas espaciales y se insertan entidades de puntos en cada una de ellas. La función ST_Relate se usa en la declaración SELECT para comprobar si los puntos son iguales. Si sabe que desea determinar si las geometrías son iguales, es recomendable que use la función 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;
Devuelve lo siguiente:
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;
Devuelve lo siguiente:
g1=g2 g1=g3 g2=g3 t f f
SQLite
En el primer ejemplo se muestra la primera opción de ST_Relate, que compara dos geometrías en función de una matriz de patrón DE-9IM para devolver 1 si las geometrías cumplen los requisitos definidos en la matriz o 0 si no los cumplen.
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;
Devuelve lo siguiente:
g1=g2 g1=g3 g2=g3 1 0 0
En este ejemplo se comparan dos geometrías y se devuelve la matriz de patrón DE-9IM.
SELECT st_relate (g1,g3)
FROM relate_test;
Devuelve lo siguiente:
st_relate (g1,g3) FF0FFF0F2