ST_Equals
Definition
ST_Equals vergleicht zwei ST_Geometry-Geometrien und gibt 1 (Oracle) oder t (PostgreSQL) zurück, wenn die beiden Geometrien identisch sind. Andernfalls wird 0 (Oracle) oder f (PostgreSQL) zurückgegeben.
Syntax
sde.st_equals (g1 sde.st_geometry, g2 sde.st_geometry)
Rückgabetyp
Integer (Boolesch)
Beispiel
Der GIS-Techniker der Stadt vermutet, dass einige Daten in der Tabelle "bldgs" dupliziert wurden. Um diese Bedenken auszuräumen, fragt er die Tabelle ab, um festzustellen, ob mehrere identische Footprint-Multipolygone vorhanden sind.
Es wurde die Tabelle "bldgs" erstellt und mit den folgenden Anweisungen gefüllt. Die Spalte "bldg_id " identifiziert die Gebäude eindeutig, und in der Spalte "footprint" wird die Geometrie des Gebäudes gespeichert.
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) );
Die Tabelle "bldgs ist durch das Equal-Prädikat räumlich mit sich selbst verknüpft. Dieses Prädikat gibt immer dann 1 zurück, wenn zwei gleiche Multipolygone gefunden werden. Durch die Bedingung "b1.bldg_id<>b2.bldg_id" wird unterbunden, dass eine Geometrie mit sich selbst verglichen wird.
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