ST_Contains
Définition
ST_Contains accepte deux objets géométrie et renvoie 1 (Oracle) ou t (PostgreSQL) si le premier objet contient complètement le second ; dans le cas contraire, la fonction renvoie 0 (Oracle) ou f (PostgreSQL).
Syntaxe
sde.st_contains (g1 sde.st_geometry, g2 sde.st_geometry)
Type de retour
Booléen
Exemple
Dans l'exemple ci-dessous, deux tables sont créées : la première, buildingfootprints, contient les emprises des bâtiments d'une municipalité, tandis que l'autre, lots, contient ses terrains. L'ingénieur municipal souhaite s'assurer que toutes les emprises des bâtiments se trouvent entièrement à l'intérieur de leurs terrains.
Dans les deux tables, le type de données multipolygon stocke la géométrie des emprises des bâtiments et des terrains. Le concepteur de la base de données a sélectionné des objets multipolygon pour les deux entités, car des parcelles peuvent être séparées par des entités naturelles, telles qu'un fleuve, et car des emprises de bâtiments peuvent inclure plusieurs bâtiments.
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)
);
L'ingénieur municipal sélectionne les bâtiments qui ne se trouvent pas entièrement dans un terrain.
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