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

3/6/2012