ST_Contains
Definición
ST_Contains toma dos objetos de geometría y devuelve 1 (Oracle) o t (PostgreSQL) si el primer objeto contiene completamente el segundo; de lo contrario, devuelve 0 (Oracle) o f (PostgreSQL).
Sintaxis
sde.st_contains (g1 sde.st_geometry, g2 sde.st_geometry)
Tipo de devolución
Booleano
Ejemplo
En el ejemplo que se muestra a continuación, se crearon dos tablas. Uno, buildingfootprints, contiene las huellas de edificios de la ciudad, mientras que la otra, varios, contiene sus lotes. El ingeniero de la ciudad desea garantizar que todas las huellas de los edificios están completamente dentro de sus lotes.
En ambas tablas, el datatype de multipolígono almacena la geometría de buildingfootprints y los lotes. El diseñador de la base de datos seleccionó multipolígonos para ambas entidades ya que los lotes pueden estar separados por las entidades naturales, como un río, y las huellas de edificio puede incluir varios edificios.
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) );
El ingeniero de la ciudad selecciona los edificios que no están completamente contenida incluidos de un lote.
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