Definición
ST_Equals compara dos geometrías y devuelve 1 (Oracle y SQLite) o t (PostgreSQL) si las geometrías son idénticas; de lo contrario, devuelve 0 (Oracle y SQLite) o f (PostgreSQL).
Sintaxis
Oracle y PostgreSQL
sde.st_equals (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_equals (geometry1 geometryblob, geometry2 geometryblob)
Tipo de devolución
Booleano
Ejemplo
El técnico SIG sospecha que algunos de los datos de la tabla studies están duplicados. Para despejar sus dudas, consulta la tabla con el fin de determinar si algunos de los multipolígonos de forma son iguales.
La tabla studies se crea y se completa con las siguientes declaraciones. La columna Id. identifica de forma única los edificios, y el campo forma almacena la geometría del área.
A continuación, la tabla studies se une espacialmente a sí misma mediante el predicado de igualdad, que devuelve 1 (Oracle y SQLite) o t (PostgreSQL) siempre que encuentra dos multipolígonos iguales. La condición s1.id<>s2.id elimina la comparación de una geometría consigo misma.
Oracle
CREATE TABLE studies (
id integer unique,
shape sde.st_geometry
);
INSERT INTO studies (id, shape) VALUES (
1,
sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
INSERT INTO studies (id, shape) VALUES (
2,
sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO studies (id, shape) VALUES (
3,
sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO studies (id, shape) VALUES (
4,
sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
SELECT UNIQUE (s1.id), s2.id
FROM STUDIES s1, STUDIES s2
WHERE sde.st_equals (s1.shape, s2.shape) = 1
AND s1.id <> s2.id;
ID ID
4 1
1 4
PostgreSQL
CREATE TABLE studies (
id serial,
shape st_geometry
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
SELECT DISTINCT (s1.id), s2.id
FROM studies s1, studies s2
WHERE st_equals (s1.shape, s2.shape) = 't'
AND s1.id <> s2.id;
id id
1 4
4 1
SQLite
CREATE TABLE studies (
id integer primary key autoincrement not null
);
SELECT AddGeometryColumn (
NULL,
'studies',
'shape',
4326,
'polygon',
'xy',
'null'
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO studies (shape) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
SELECT DISTINCT (s1.id), s2.id
FROM studies s1, studies s2
WHERE st_equals (s1.shape, s2.shape) = 1
AND s1.id <> s2.id;
id id
1 4
4 1