ST_Equals
Définition
ST_Equals compare deux objets ST_Geometry et renvoie 1 (Oracle) ou t (PostgreSQL) si les géométries sont identiques. Dans le cas contraire, la fonction renvoie 0 (Oracle) ou f (PostgreSQL).
Syntaxe
sde.st_equals (g1 sde.st_geometry, g2 sde.st_geometry)
Type de retour
Nombre entier (Booléen)
Exemple
Le technicien SIG municipal pense que certaines données de la table bldgs ont été dupliquées. Afin de lever cette incertitude, il interroge la table pour déterminer si certains objets multipolygon d'emprise sont égaux.
La table bldgs a été créée et remplie à l'aide des instructions ci-dessous. La colonne bldg_id identifie les bâtiments de façon unique et l'emprise footprint stocke la géométrie du bâtiment.
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 table bldgs est spatialement jointe à elle-même par le prédicat equal, qui retourne 1 dès qu'il détecte deux objets multipolygon égaux. La condition b1.bldg_id<>b2.bldg_id écarte la comparaison d'une géométrie à elle-même.
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