ST_Within

Definición

ST_Within devuelve 1 (Oracle) o t (PostgreSQL) si el primer objeto ST_Geometry está completamente dentro de la segunda; de lo contrario, devuelve 0 (Oracle) o f (PostgreSQL).

Sintaxis

sde.st_within (g1 sde.st_geometry, g2 sde.st_geometry)

Tipo de devolución

Booleano

Ejemplo

En el siguiente ejemplo, se crean dos tablas: uno, bfootprints, contiene las huellas de edificios de una ciudad, mientras que la otra, lotes, contiene su lotes. El ingeniero de la ciudad quiere asegurarse de que todas las huellas de edificios están completamente dentro de sus lotes.

En ambas tablas, el tipo de datos multipolígono almacena el ST_Geometry de las huellas de edificios y de lotes. El diseñador de la base de datos seleccionó ST_MultiPolygons para ambas entidades porque se dio cuenta que un lote lo puede separar una entidad natural, como un río, y una huella de edificio puede estar compuesta de varios edificios.

CREATE TABLE bfootprints (building_id integer, footprint sde.st_geometry);  CREATE TABLE lots (lot_id integer, lot sde.st_geometry);   INSERT INTO bfootprints (building_id, footprint) VALUES ( 1, sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0) );  INSERT INTO bfootprints (building_id, footprint) VALUES ( 2, sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0) );  INSERT INTO bfootprints (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) );

El ingeniero de la ciudad selecciona los edificios que no están completamente dentro de un lote.

Oracle

SELECT bf.building_id FROM BFOOTPRINTS bf, LOTS l WHERE sde.st_intersects (bf.footprint, l.lot) = 1  AND sde.st_within (bf.footprint, l.lot) = 0;  BUILDING_ID            2

PostgreSQL

SELECT bf.building_id FROM bfootprints bf, lots l WHERE sde.st_intersects (bf.footprint, l.lot) = 't'  AND sde.st_within (bf.footprint, l.lot) = 'f';  building_id            2

7/11/2012