ST_Equals
Definición
ST_Equals compara dos ST_Geometries y devuelve 1 (Oracle) o t (PostgreSQL) si las geometrías son idénticas; de lo contrario, devuelve 0 (Oracle) o f (PostgreSQL).
Sintaxis
sde.st_equals (g1 sde.st_geometry, g2 sde.st_geometry)
Tipo de devolución
Entero (booleano)
Ejemplo
El técnico de la ciudad SIG sospecha que algunos de los datos en la tabla bldgs se ha duplicado. Para disminuir su preocupación, consulta la tabla para determinar si alguno de los multipolígonos de huella es igual.
La tabla bldgs se crea y se completa con las siguientes declaraciones. La columna bldg_id identifica exclusivamente los edificios, y la huella almacena la geometría de la construcción.
Oracle
CREATE TABLE bldgs (bldg_id integer unique, footprint sde.st_geometry); INSERT INTO BLDGS (bldg_id, footprint) VALUES ( 1, sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) ); INSERT INTO BLDGS (bldg_id, footprint) VALUES ( 2, sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0) ); INSERT INTO BLDGS (bldg_id, footprint) VALUES ( 3, sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0) ); INSERT INTO BLDGS (bldg_id, footprint) VALUES ( 4, sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) );
PostgreSQL
CREATE TABLE bldgs (bldg_id integer unique, footprint st_geometry); INSERT INTO bldgs (bldg_id, footprint) VALUES ( 1, st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) ); INSERT INTO bldgs (bldg_id, footprint) VALUES ( 2, st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0) ); INSERT INTO bldgs (bldg_id, footprint) VALUES ( 3, st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0) ); INSERT INTO bldgs (bldg_id, footprint) VALUES ( 4, st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) );
La tabla bldgs se une espacialmente a sí misma mediante el predicado de igualdad, que devuelve 1 siempre que encuentra dos multipolígonos iguales. La condición b1.bldg_id<>b2.bldg_id elimina la comparación de una geometría consigo misma.
Oracle
SELECT UNIQUE (b1.bldg_id), b2.bldg_id FROM BLDGS b1, BLDGS b2 WHERE sde.st_equals (b1.footprint, b2.footprint) = 1 AND b1.bldg_id <> b2.bldg_id; BLDG_ID BLDG_ID 4 1 1 4
PostgreSQL
SELECT DISTINCT (b1.bldg_id), b2.bldg_id FROM bldgs b1, bldgs b2 WHERE st_equals (b1.footprint, b2.footprint) = 't' AND b1.bldg_id <> b2.bldg_id; bldg_id bldg_id 1 4 4 1