ST_Contains
Definition
ST_Contains wählt zwei Geometrieobjekte aus und gibt "1" (Oracle) oder "t" (PostgreSQL) zurück, wenn das zweite Objekt vollständig im ersten Objekt enthalten ist. Andernfalls wird "0" (Oracle) oder "f" (PostgreSQL) zurückgegeben.
Syntax
sde.st_contains (g1 sde.st_geometry, g2 sde.st_geometry)
Rückgabetyp
Boolesch
Beispiel
Im folgenden Beispiel werden zwei Tabellen erstellt. Die Tabelle "buildingfootprints" enthält die Gebäudegrundrisse einer Stadt, die Tabelle "lots" Bauplätze. Der technische Beigeordnete will sicherstellen, dass sich alle Gebäudegrundrisse vollständig innerhalb ihrer Bauplätze befinden.
In beiden Tabellen wird im Datentyp "Multipolygon" die Geometrie der Gebäudegrundrisse und der Bauplätze gespeichert. Der Datenbankdesigner hat Multipolygone für beide Features ausgewählt, da Bauplätze durch natürliche Features (z. B. einen Fluss) getrennt sein und Gebäudegrundrisse mehrere Gebäude umfassen können.
Oracle
CREATE TABLE bfp (building_id integer, footprint sde.st_geometry); CREATE TABLE lots (lot_id integer, lot sde.st_geometry); INSERT INTO BFP (building_id, footprint) VALUES ( 1, sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) ); INSERT INTO BFP (building_id, footprint) VALUES ( 2, sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0) ); INSERT INTO BFP (building_id, footprint) VALUES ( 3, sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0) ); INSERT INTO LOTS (lot_id, lot) VALUES ( 1, sde.st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 0) ); INSERT INTO LOTS (lot_id, lot) VALUES ( 2, sde.st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 0) ); INSERT INTO LOTS (lot_id, lot) VALUES ( 3, sde.st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 0) );
PostgreSQL
CREATE TABLE bfp (building_id integer, footprint st_geometry); CREATE TABLE lots (lot_id integer, lot st_geometry); INSERT INTO bfp (building_id, footprint) VALUES ( 1, st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) ); INSERT INTO bfp (building_id, footprint) VALUES ( 2, st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0) ); INSERT INTO bfp (building_id, footprint) VALUES ( 3, st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0) ); INSERT INTO lots (lot_id, lot) VALUES ( 1, st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 0) ); INSERT INTO lots (lot_id, lot) VALUES ( 2, st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 0) ); INSERT INTO lots (lot_id, lot) VALUES ( 3, st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 0) );
Der technische Beigeordnete wählt die Gebäude aus, die nicht vollständig innerhalb eines Bauplatzes enthalten sind.
Oracle
SELECT UNIQUE (building_id) FROM BFP, LOTS WHERE sde.st_intersects (lot, footprint) = 1 AND sde.st_contains (lot, footprint) = 0; BUILDING_ID 2
PostgreSQL
SELECT DISTINCT (building_id) FROM bfp, lots WHERE st_intersects (lot, footprint) = 't' AND st_contains (lot, footprint) = 'f'; building_id 2