ST_Within
Definition
ST_Within gibt 1 (Oracle) oder t (PostgreSQL) zurück, wenn das erste ST_Geometry-Objekt vollkommen innerhalb des zweiten ST_Geometry-Objekts liegt. Andernfalls wird 0 (Oracle) oder f (PostgreSQL) zurückgegeben.
Syntax
sde.st_within (g1 sde.st_geometry, g2 sde.st_geometry)
Rückgabetyp
Boolesch
Beispiel
Im nachfolgenden Beispiel werden zwei Tabellen erstellt: die Tabelle "bfootprints" enthält die Grundrisse aller Gebäude einer Stadt, und die Tabelle "lots" enthält die Grundstücke. Das Bauamt möchte sicherstellen, dass sich alle Gebäudegrundrisse innerhalb der zugehörigen Grundstücke befinden.
In beiden Tabellen wird mit dem Datentyp "ST_MultiPolygons" das ST_Geometry-Objekt mit den Gebäudegrundrissen und den Grundstücken gespeichert. Der Datenbankentwickler hat den Datentyp ST_MultiPolygons für beide Features gewählt, da ein Grundstück durch eine natürliches Feature, z. B. einen Fluss, durchkreuzt werden und ein Gebäudegrundriss aus mehreren Gebäuden bestehen kann.
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) );
Das Bauamt wählt die Gebäude aus, deren Grundriss sich nicht vollkommen innerhalb des zugehörigen Grundstücks befindet.
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