ST_Within verwendet zwei Geometrieobjekte und gibt 1 (TRUE) zurück, wenn das erste Objekt im zweiten vollständig enthalten ist; andernfalls wird 0 (FALSE) zurückgegeben.
Syntax
db2gse.ST_Within(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)
Rückgabetyp
Integer
Beispiele
Im nachfolgenden Beispiel werden zwei Tabellen erstellt. Die erste Tabelle, BUILDINGFOOTPRINTS, enthält die Gebäudegrundflächen einer Stadt. Die zweite Tabelle, LOTS, enthält die Grundstücke der Stadt. Der Stadtplaner möchte sicherstellen, daß alle Gebäudegrundflächen vollständig auf dem jeweiligen Grundstück liegen.
In beiden Tabellen speichert der Datentyp Multipolygon die Geometrie der Gebäudegrundflächen und der Grundstücke. Der Datenbank-Designer hat für beide Merkmale Multipolygone ausgewählt, da die Grundstücke durch natürliche Merkmale wie beispielsweise Flüsse unterbrochen sein können und da die Gebäudegrundflächen häufig mehrere Gebäude umfassen.
CREATE TABLE BUILDINGFOOTPRINTS ( building_id integer, lot_id integer, footprint db2gse.ST_MultiPolygon); CREATE TABLE LOTS ( lot_id integer, lot db2gse.ST_MultiPolygon );
Mit der folgenden Anweisung SELECT wählt der Stadtplaner zunächst die Gebäude aus, die nicht nicht vollständig auf einem Grundstück liegen.
SELECT building_id FROM BUILDINGFOOTPRINTS, LOTS WHERE db2gse.ST_Within(footprint,lot) = 0;
Die erste Abfrage liefert zwar eine Liste aller BUILDING_IDs, deren Gebäudegrundfläche außerhalb eines Grundstückspolygons liegt; sie ermittelt jedoch nicht, ob den übrigen Gebäuden die richtige lot_id zugeordnet wurde. Diese zweite SELECT-Anweisung führt eine Datenintegritätsprüfung mit der Spalte LOT_ID der Tabelle BUILDINGFOOTPRINTS aus.
SELECT bf.building_id "building id", bf.lot_id "buildings lot_id", LOTS.lot_id "LOTS lot_id" FROM BUILDINGFOOTPRINTS bf, LOTS WHERE db2gse.ST_Within(footprint,lot) = 1 AND LOTS.lot_id <> bf.lot_id;