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

7/11/2012