ST_Relate

Definición

ST_Relate compara dos geometrías y devuelve 1 (Oracle y SQLite) o t (PostgreSQL) si las geometrías cumplen con 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).

Sintaxis

Oracle y PostgreSQL

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

SQLite

st_relate (geometry1 geometryblob, geometry2 geometryblob, patternMatrix string)

Tipo de devolución

Booleano

Ejemplo

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 este ejemplo, se crea una tabla, relate_test, con tres columnas espaciales y se insertan entidades de punto 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;
 
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

Temas relacionados

5/10/2014