Les fonctions relationnelles utilisent des prédicats pour tester différents types de relations spatiales. Les tests comparent les relations entre les éléments suivants :
- l'extérieur (E) des géométries qui est l'ensemble de l'espace non occupé par une géométrie ;
- l'intérieur (I) des géométries qui est l'espace occupé par une géométrie ;
- la limite (B) des géométries, qui est l'interface entre l'intérieur d'une géométrie et l'extérieur.
Les prédicats testent les relations. Ils retournent 1 ou t (TRUE) si une comparaison répond aux critères de la fonction ; dans le cas contraire, ils retournent 0 ou f (FALSE). Les prédicats qui testent une relation spatiale comparent des paires de géométries qui peuvent être d'un type ou d'une dimension différente.
Les prédicats comparent les coordonnées x et y des géométries envoyées. Les coordonnées z et les valeurs de mesure, si elles existent, sont ignorées. Les géométries comportant des coordonnées z ou des mesures peuvent être comparées à celles n'en ayant pas.
Le modèle Dimensionally Extended 9 Intersection (DE-9IM) développé par Clementini, et al. étend dimensionnellement le modèle 9 Intersection d'Egenhofer et Herring. DE-9IM est une approche mathématique qui définit la relation spatiale deux par deux entre des géométries de types et de dimensions différents. Ce modèle exprime les relations spatiales parmi tous les types de géométrie comme des intersections deux par deux de leur intérieur, limite et extérieur en respectant la dimension des intersections résultantes.
Les géométries a et b, I(a), B(a) et E(a) représentent l'intérieur, la limite et l'extérieur de a, et I(b), B(b) et E(b) représentent l'intérieur, la limite et l'extérieur de b. Les intersections de I(a), B(a) et E(a) avec I(b), B(b) et E(b) produisent une matrice trois par trois. Chaque intersection peut générer des géométries de dimensions différentes. Par exemple, l'intersection des limites de deux polygones pourrait se composer d'un point et d'une chaîne de lignes, auquel cas la fonction dim (dimension) retournerait la dimension maximale de 1.
La fonction dim renvoie une valeur de -1, 0, 1 ou 2. Le -1 correspond à l'ensemble vide qui est retourné lorsque aucune intersection n'est trouvée ou dim(Ø).
Intérieur | Limite | Extérieur | |
---|---|---|---|
Intérieur | dim(I(a) intersecte I(b)) | dim(I(a) intersecte B(b)) | dim(I(a) intersecte E(b)) |
Limite | dim(B(a) intersecte I(b)) | dim(B(a) intersecte B(b)) | dim(B(a) intersecte E(b)) |
Extérieur | dim(E(a) intersecte I(b)) | dim(E(a) intersecte B(b)) | dim(E(a) intersecte E(b)) |
Les résultats des prédicats de relation spatiale peuvent être interprétés ou vérifiés en comparant les résultats du prédicat à une matrice modèle qui représente les valeurs acceptables pour le DE-9IM.
La matrice modèle contient les valeurs acceptables pour chacune des cellules de la matrice d'intersection. Les valeurs de modèle possibles sont les suivantes :
T—Une intersection doit exister ; dim= 0, 1 ou 2
F—Une intersection ne doit pas exister ; dim= -1
*—Peu importe qu'une intersection existe ou pas ; dim= -1, 0, 1 ou 2
0—Une intersection doit exister et sa dimension maximale doit être 0 ; dim= 0
1—Une intersection doit exister et sa dimension maximale doit être 1 ; dim= 1
2—Une intersection doit exister et sa dimension maximale doit être 2 ; dim= 2
Chaque prédicat a au moins une matrice modèle, mais quelques-uns en requièrent plusieurs pour décrire les relations de combinaisons de différents types de géométrie.
La matrice modèle du prédicat ST_Within pour les combinaisons de géométries présente la forme suivante :
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | F | |
a | Limite | * | * | F |
Extérieur | * | * | * |
En clair, le prédicat ST_Within retourne TRUE lorsque les intérieurs des deux géométries s'intersectent, et l'intérieur et la limite de a n'intersecte pas l'extérieur de b. Toutes les autres conditions importent peu.
Les sections suivantes décrivent différents prédicats utilisés pour les relations spatiales. Dans les diagrammes de ces sections, la première géométrie en entrée répertoriée est affichée en noir et la seconde en orange.
ST_Contains
ST_Contains retourne 1 ou t (TRUE) si la deuxième géométrie est entièrement contenue dans la première. Le prédicat ST_Contains retourne le résultat opposé exact du prédicat ST_Within.
La matrice modèle de prédicat ST_Contains déclare que les intérieurs des deux géométries doivent s'intersecter et que l'intérieur et la limite de la géométrie secondaire (géométrie b) ne doivent pas intersecter l'extérieur de la géométrie principale (géométrie a).
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | * | |
a | Limite | * | * | * |
Extérieur | F | F | * |
Utiliser ST_Within ou ST_Contains identifie uniquement les géométries qui s'intègrent entièrement à l'intérieur d'une autre géométrie. Cela aide à éliminer de votre sélection les entités qui pourraient fausser les résultats. Dans l'exemple ci-dessous, un vendeur de glace itinérant souhaite déterminer quels quartiers présentent le plus grand nombre d'enfants (clients potentiels) pour être sûr de restreindre son itinéraire à ces endroits. Il compare les polygones des quartiers désignés aux secteurs de recensement, qui comportent un attribut de nombre total d'enfants âgés de moins de 16 ans.
A moins que tous les enfants qui vivent dans le secteur de recensement 1 et le secteur de recensement 3 vivent dans Westside, inclure ces enregistrements dans la sélection pourraient élever à tort le nombre d'enfants dans le quartier Westside. En spécifiant qu'uniquement les secteurs de recensement intégrés complément dans les quartiers soient inclus (ST_Within = 1), le vendeur de glace évite de risquer de perdre du temps dans ces zones de Westside et par conséquent de perdre de l'argent.
Reportez-vous à la rubrique ST_Contains pour découvrir la syntaxe et un exemple.
ST_Crosses
ST_Crosses retourne 1 ou t (TRUE) si l'intersection résulte en une géométrie comportant une dimension inférieure de un à la dimension maximale des deux géométries source et si l'ensemble d'intersections est intérieur aux deux géométries source. ST_Crosses retourne 1 ou t (TRUE) uniquement pour les comparaisons ST_MultiPoint/ST_Polygon, ST_MultiPoint/ST_LineString, ST_Linestring/ST_LineString, ST_LineString/ST_Polygon et ST_LineString/ST_MultiPolygon.
Cette matrice modèle de prédicat ST_Crosses s'applique à ST_MultiPoint/ST_LineString, ST_MultiPoint/ST_MultiLineString, ST_MultiPoint/ST_Polygon, ST_MultiPoint/ST_MultiPolygon, ST_LineString/ST_Polygon a ST_LineString/ST_MultiPolygon. La matrice déclare que les intérieurs doivent s'intersecter et qu'au moins l'intérieur de la géométrie principale (géométrie a) doit intersecter l'extérieur de la géométrie secondaire (géométrie b).
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | T | |
a | Limite | * | * | * |
Extérieur | * | * | * |
Cette matrice de prédicat ST_Crosses s'applique à ST_LineString/ST_LineString, ST_LineString/ST_MultiLineString et ST_MultiLineString/ST_MultiLineString. La matrice déclare que la dimension de l'intersection des intérieurs doit être 0 (intersection à un point). Si la dimension de cette intersection était 1 (intersection à une chaîne de lignes), le prédicat ST_Crosses retournerait FALSE, mais le prédicat ST_Overlaps retournerait TRUE.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | 0 | * | * | |
a | Limite | * | * | * |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Crosses pour découvrir la syntaxe et un exemple.
ST_Disjoint
ST_Disjoint renvoie 1 ou t (TRUE) si l'intersection des deux géométries est un ensemble vide. En d'autres termes, les géométries sont disjointes si elles ne s'intersectent pas.
La matrice modèle du prédicat ST_Disjoint déclare simplement que ni les intérieurs ni les limites de l'une des géométries ne s'intersectent.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | F | F | * | |
a | Limite | F | F | * |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Disjoint pour découvrir la syntaxe et un exemple.
ST_Equals
ST_Equals retourne 1 ou t (TRUE) si deux géométries du même type ont des valeurs de coordonnées x,y identiques. Les premier et deuxième étages d'un immeuble pourraient avoir des coordonnées x,y identiques et, par conséquent, être égaux. ST_Equals peut également déterminer si deux entités ont été placées par erreur l'une sur l'autre.
La matrice modèle DE-9IM, en vue d'un traitement égal, garantit que les intérieurs s'intersectent et qu'aucune partie de l'intérieur ou de la limite de l'une des géométries n'intersecte l'extérieur de l'autre.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | F | |
a | Limite | * | * | F |
Extérieur | F | F | * |
Reportez-vous à la rubrique ST_Equals pour découvrir la syntaxe et un exemple.
ST_Intersects
ST_Intersects retourne 1 ou t (TRUE) si l'intersection ne résulte pas en un ensemble vide. ST_Intersects retourne exactement le résultat opposé de ST_Disjoint.
Le prédicat ST_Intersects retournera TRUE si les conditions des matrices modèles suivantes retournent TRUE.
Le prédicat ST_Intersects retourne TRUE si les intérieurs des deux géométries s'intersectent.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | * | |
a | Limite | * | * | * |
Extérieur | * | * | * |
Le prédicat ST_Intersects renvoie TRUE si l'intérieur de la première géométrie intersecte la limite de la deuxième géométrie.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | * | T | * | |
a | Limite | * | * | * |
Extérieur | * | * | * |
Le prédicat ST_Intersects retourne TRUE si la limite de la première géométrie intersecte l'intérieur de la deuxième géométrie.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | * | * | * | |
a | Limite | T | * | * |
Extérieur | * | * | * |
Le prédicat ST_Intersects retourne TRUE si les limites de l'une des géométries s'intersectent.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | * | * | * | |
a | Limite | * | T | * |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Intersects pour découvrir la syntaxe et un exemple.
ST_Overlaps
ST_Overlaps compare deux géométries de même dimension et retourne 1 ou t (TRUE) si leur ensemble d'intersections résulte en une géométrie différente des deux, mais de même dimension.
ST_Overlaps retourne 1 ou t (TRUE) seulement pour les géométries de même dimension et uniquement lorsque leur ensemble d'intersections résulte en une géométrie de même dimension. En d'autres termes, si l'intersection de deux objets ST_Polygon résulte en un objet ST_Polygon, ST_Overlaps retourne 1 ou t (TRUE).
Cette matrice modèle s'applique aux superpositions ST_Polygon/ST_Polygon, ST_MultiPoint/ST_MultiPoint, et ST_MultiPolygon/ST_MultiPolygon. Pour ces combinaisons, le prédicat overlap retourne TRUE si l'intérieur des deux géométries intersecte l'intérieur et l'extérieur de chacune.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | T | |
a | Limite | * | * | * |
Extérieur | T | * | * |
La matrice modèle suivante s'applique aux superpositions ST_LineString/ST_LineString et ST_MultiLineString/ST_MultiLineString. Dans ce cas, l'intersection des géométries doit résulter en une géométrie qui a une dimension de 1 (un autre ST_LineString ou ST_MultiLineString). Si la dimension de l'intersection des intérieurs avait retourné 0 (un point), le prédicat ST_Overlaps aurait retourné FALSE. Toutefois, le prédicat ST_Crosses aurait retourné TRUE.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | 1 | * | T | |
a | Limite | * | * | * |
Extérieur | T | * | * |
Reportez-vous à la rubrique ST_Overlaps pour découvrir la syntaxe et un exemple.
ST_Relate
ST_Relate retourne une valeur de 1 ou t (TRUE) si la relation spatiale spécifiée par la matrice modèle est valide. Une valeur de 1 ou t (TRUE) indique qu'il existe une sorte de relation spatiale entre les géométries.
Si les intérieurs ou les limites des géométries a et b sont liés d'une façon ou d'une autre, ST_Relate retourne TRUE. Que les extérieurs d'une géométrie intersectent ou pas l'intérieur ou la limite de l'autre n'a aucune importance.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | T | * | |
a | Limite | T | T | * |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Relate pour découvrir la syntaxe et un exemple.
ST_Touches
ST_Touches retourne 1 ou t (TRUE) si aucun des points communs aux deux géométries n'intersecte les intérieurs des deux géométries. Au moins une géométrie doit être un ST_LineString, ST_Polygon, ST_MultiLineString ou ST_MultiPolygon.
Les matrices modèle montrent que le prédicat ST_Touches retourne TRUE lorsque les intérieurs de la géométrie n'intersectent pas et que la limite de l'une des géométries intersecte l'intérieur ou la limite de l'autres.
Le prédicat ST_Touches retourne TRUE si la limite de géométrie b intersecte l'intérieur de a, mais que les intérieurs ne s'intersectent pas.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | F | T | * | |
a | Limite | * | * | * |
Extérieur | * | * | * |
Le prédicat ST_Touches retourne TRUE si la limite de géométrie a intersecte l'intérieur de b, mais que les intérieurs ne s'intersectent pas.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | F | * | * | |
a | Limite | T | * | * |
Extérieur | * | * | * |
Le prédicat ST_Touches retourne TRUE si les limites des deux géométries s'intersectent, mais pas les intérieurs.
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | F | * | * | |
a | Limite | * | T | * |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Touches pour découvrir la syntaxe et un exemple.
ST_Within
ST_Within retourne 1 ou t (TRUE) si la première géométrie est entièrement à l'intérieur de la deuxième géométrie. ST_Within teste le résultat opposé exact de ST_Contains.
La matrice modèle de prédicat ST_Within déclare que les intérieurs des deux géométries doivent s'intersecter et que l'intérieur et la limite de la géométrie principale (géométrie a) ne doivent pas intersecter l'extérieur de la géométrie secondaire (géométrie b).
b | ||||
Intérieur | Limite | Extérieur | ||
Intérieur | T | * | F | |
a | Limite | * | * | F |
Extérieur | * | * | * |
Reportez-vous à la rubrique ST_Within pour découvrir la syntaxe et un exemple.