Fonctions de relations spatiales pour ST_Geometry

Les implémentations ST_Geometry par ESRI et IBM utilisent des prédicats pour déterminer si une relation spécifique existe entre une paire de géométries. Les prédicats sont des fonctions qui retournent 1 ou t pour TRUE si un test réussit et 0 ou f pour FALSE dans le cas contraire.

Comme l'indique la rubrique Différences de mises en œuvre SQL du type ST_Geometry, les valeurs retournées par le module IBM Informix Spatial DataBlade et PostgreSQL pour ces fonctions sont booléennes (t pour TRUE, f pour FALSE). Pour le type ST_Geometry dans Oracle et IBM DB2 Spatial Extender, les valeurs renvoyées sont 1 (un) et 0 (zéro) pour TRUE et FALSE.

D'autres fonctions renvoient une valeur qui résulte d'une relation spatiale. Par exemple, le résultat retourné par la fonction ST_Distance est un nombre à double précision qui représente l'espace séparant deux géométries. De même, les fonctions telles que ST_Intersection retournent une géométrie comme résultat d'une combinaison de deux géométries.

Cette rubrique traite des méthodes de test des différents types de relations spatiales. Les tests comparent les relations entre les éléments suivants :

Les prédicats sont utilisés pour effectuer ces comparaisons.

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é lorsqu'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))

Exemple d'intersection de prédicat

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

Boundary

Extérieur

Intérieur

T

*

F

un

Boundary

*

*

F

Extérieur

*

*

*

exemple de matrice modèle

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.

ST_Contains retourne TRUE si la deuxième géométrie est complètement à l'intérieur de la première.

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

Boundary

Extérieur

Intérieur

T

*

*

un

Boundary

*

*

*

Extérieur

F

F

*

Matrice ST_Contains

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.

Affiche la différence entre within et contains.

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.

ST_Crosses retourne TRUE si la dimension de l'intersection est inférieure d'une unité à la dimension maximale des géométries source et que les intérieurs des deux géométries sont intersectés.

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

Boundary

Extérieur

Intérieur

T

*

T

un

Boundary

*

*

*

Extérieur

*

*

*

Matrice 1 ST_Crosses

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

Boundary

Extérieur

Intérieur

0

*

*

un

Boundary

*

*

*

Extérieur

*

*

*

Matrice 2 ST_Crosses

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.

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

Boundary

Extérieur

Intérieur

F

F

*

un

Boundary

F

F

*

Extérieur

*

*

*

Matrice ST_Disjoint

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.

Les géométries sont égales si elles comportent des coordonnées x,y identiques.

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

Boundary

Extérieur

Intérieur

T

*

F

un

Boundary

*

*

F

Extérieur

F

F

*

ST_EQUAL

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

Boundary

Extérieur

Intérieur

T

*

*

un

Boundary

*

*

*

Extérieur

*

*

*

Matrice 1 ST_Intersects

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

Boundary

Extérieur

Intérieur

*

T

*

un

Boundary

*

*

*

Extérieur

*

*

*

Matrice 2 ST_Intersects

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

Boundary

Extérieur

Intérieur

*

*

*

un

Boundary

T

*

*

Extérieur

*

*

*

Matrice 3 ST_Intersects

Le prédicat ST_Intersects retourne TRUE si les limites de l'une des géométries s'intersectent.

b

Intérieur

Boundary

Extérieur

Intérieur

*

*

*

un

Boundary

*

T

*

Extérieur

*

*

*

Matrice 4 ST_Intersects

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).

ST_Overlaps compare deux géométries de la même dimension.

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

Boundary

Extérieur

Intérieur

T

*

T

un

Boundary

*

*

*

Extérieur

T

*

*

Matrice 1 ST_Overlaps

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

Boundary

Extérieur

Intérieur

1

*

T

un

Boundary

*

*

*

Extérieur

T

*

*

Matrice 2 ST_Overlaps

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

Boundary

Extérieur

Intérieur

T

T

*

un

Boundary

T

T

*

Extérieur

*

*

*

Matrice ST_Relate

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.

Retourne TRUE si l'une des limites des géométries intersecte ou si un seul des intérieurs de la géométrie intersecte l'intérieur de l'autre.

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

Boundary

Extérieur

Intérieur

F

T

*

un

Boundary

*

*

*

Extérieur

*

*

*

Matrice 1 ST_Touches

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

Boundary

Extérieur

Intérieur

F

*

*

un

Boundary

T

*

*

Extérieur

*

*

*

Matrice 2 ST_Touches

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

Boundary

Extérieur

Intérieur

F

*

*

un

Boundary

*

T

*

Extérieur

*

*

*

Matrice 3 ST_Touches

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.

ST_Within retourne TRUE si la première géométrie est entièrement à l'intérieur de la deuxième géométrie.

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

Boundary

Extérieur

Intérieur

T

*

F

un

Boundary

*

*

F

Extérieur

*

*

*

Matrice ST_Within

Reportez-vous à la rubrique ST_Within pour découvrir la syntaxe et un exemple.

Rubriques associées


3/6/2012