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

3/6/2012