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