Guide d'utilisation et de référence

ST_Within

ST_Within utilise deux géométries en entrée et renvoie la valeur 1 (TRUE) si le premier objet est entièrement contenu entièrement dans le second, et la valeur 0 (FALSE) dans le cas contraire.

Syntaxe

db2gse.ST_Within(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)

Type de retour

Integer

Exemples

Dans l'exemple ci-dessous, deux tables sont créées. La première, BUILDINGFOOTPRINTS, contient le bâti d'une ville et la seconde, LOTS, le parcellaire. Le directeur des services techniques municipaux veut s'assurer que tous les bâtis sont entièrement contenus dans leur parcelle respective.

Dans les deux tables, le type de données multipolygone permet de stocker la géométrie des bâtis et celle des parcelles. Le concepteur de la base de données a tenu compte du fait que les parcelles pouvaient être disjointes par des entités naturelles (rivière, etc.) et qu'un bâti pouvait souvent être constitué de plusieurs bâtiments.

CREATE TABLE BUILDINGFOOTPRINTS (   building_id integer,
                                    lot_id      integer,
                                    footprint   db2gse.ST_MultiPolygon);
 
 
CREATE TABLE LOTS (  lot_id integer, lot db2gse.ST_MultiPolygon ); 

L'instruction SELECT ci-après a permis au directeur des services techniques municipaux de sélectionner tout d'abord les bâtis qui n'étaient pas entièrement contenus dans une parcelle.

SELECT building_id
  FROM BUILDINGFOOTPRINTS, LOTS
 WHERE db2gse.ST_Within(footprint,lot) <> 1; 

Bien que la première requête renvoie la liste de tous les ID bâtiment associés à des bâtis figurant en dehors d'un polygone de parcelle, elle ne permet pas de déterminer si les autres se sont vus affecter des ID parcelle (lot_id) corrects. La seconde instruction SELECT exécute une vérification de l'intégrité des données sur la colonne LOT_ID de la table BUILDINGFOOTPRINTS.

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; 


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]