Definition
ST_Contains wählt zwei Geometrieobjekte aus und gibt "1" (Oracle und SQLite) oder "t" (PostgreSQL) zurück, wenn das zweite Objekt vollständig im ersten Objekt enthalten ist. Andernfalls wird "0" (Oracle und SQLite) oder "f" (PostgreSQL) zurückgegeben.
Syntax
Oracle und PostgreSQL
sde.st_contains (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_contains (geometry1 geometryblob, geometry2 geometryblob)
Rückgabetyp
Boolesch
Beispiel
In den folgenden Beispielen werden zwei Tabellen erstellt. Die Tabelle "buildingfootprints" enthält die Gebäudegrundrisse einer Stadt, die Tabelle "lots" Flurstücke. Der technische Beigeordnete will sicherstellen, dass sich alle Gebäudegrundrisse vollständig innerhalb ihrer Flurstücke befinden.
Der technische Beigeordnete verwendet "ST_Intersects" und "ST_Contains", um die Gebäude auszuwählen, die nicht vollständig in einer Parzelle enthalten sind.
Oracle
--Create tables and insert values.
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))', 4326)
);
INSERT INTO BFP (building_id, footprint) VALUES (
2,
sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO BFP (building_id, footprint) VALUES (
3,
sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO LOTS (lot_id, lot) VALUES (
1,
sde.st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 4326)
);
INSERT INTO LOTS (lot_id, lot) VALUES (
2,
sde.st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 4326)
);
INSERT INTO LOTS (lot_id, lot) VALUES (
3,
sde.st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 4326)
);
--Select the buildings that are not completely contained within one lot.
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
--Create tables and insert values.
CREATE TABLE bfp (
building_id serial,
footprint st_geometry);
CREATE TABLE lots
(lot_id serial,
lot st_geometry);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 4326)
);
--Select the buildings that are not completely contained within one lot.
SELECT DISTINCT (building_id)
FROM bfp, lots
WHERE st_intersects (lot, footprint) = 't'
AND st_contains (lot, footprint) = 'f';
building_id
2
SQLite
--Create tables, add geometry columns, and insert values.
CREATE TABLE bfp (
building_id integer primary key autoincrement not null
);
SELECT AddGeometryColumn (
NULL,
'bfp',
'footprint',
4326,
'polygon',
'xy',
'null'
);
CREATE TABLE lots
(lot_id integer primary key autoincrement not null
);
SELECT AddGeometryColumn (
NULL,
'lots',
'lot',
4326,
'polygon',
'xy',
'null'
);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 4326)
);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 4326)
);
INSERT INTO bfp (footprint) VALUES (
st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 4326)
);
INSERT INTO lots (lot) VALUES (
st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 4326)
);
--Select the buildings that are not completely contained within one lot.
SELECT DISTINCT (building_id)
FROM bfp, lots
WHERE st_intersects (lot, footprint) = 1
AND st_contains (lot, footprint) = 0;
building_id
2