Les jointures spatiales

Il n'est pas toujours possible de réaliser une jointure attributaire s'il n'y a pas de colonne commune entre deux tables. Dans le cas de tables ayant chacune un champ géométrique il est possible de réaliser des jointures spatiales.

La jointure spatiale utilisera une fonction spatiale (voir ci-dessous) dans la clause WHERE d'une requête SQL :

exemple  :

SELECT * FROM tableA, tableB WHERE ST_Intersects(tableA.geometry, tableB.geometry)

Les relations spatiales

Les prédicats spatiaux de l'OGC sont représentés dans le tableau suivant :

Prédicats de l'OGC

Ils sont disponibles sous formes de fonctions spatiales qui renvoient VRAI (1) ou FAUX (0) :

ST_Equals(geometry A, geometry B) retourne vrai si les géométries sont de même type et ont les mêmes coordonnées.

ST_Intersects(geometry A, geometry B) retourne vrai s'il y a au moins un point commun.

ST_Disjoint(geometry A, geometry B) retourne vrai s'il n'y a aucun point commun (équivalent à n'intersecte pas ou NOT ST_Intersect, qu'il est préférable d'utiliser pour des questions de performance lièe aux possibilités d'indexation spatiale)

ST_Crosses(geometry A, geometry B) retourne vrai si le résultat de l'intersection des géométries est de dimension immédiatement inférieure à la plus grande des dimensions des objets (ex : si A est un polygone et B une ligne, la dimension de l'intersection doit être une ligne) ET que le résultat de l'intersection est à l'intérieur des deux géométries.

ST_Overlaps(geometry A, geometry B) retourne vrai si les deux géométries sont de même dimension et que l'intersection est de même dimension mais de géométrie différente (renvoi faux si les deux géométries sont identiques).

ST_Touches(geometry A, geometry B) retourne vrai si les contours s'intersectent ou si un seul des intérieurs intersecte le contour de l'autre.

ST_Within(geometry A, geometry B) retourne vrai si le premier objet est complétement dans le deuxième.

ST_Contains(geometry A, geometry B) retourne vrai si le deuxième objet est complétement dans le premier.

Les fonctions suivantes sont également intéressantes :

ST_Dwithin(geometry A, geometry B, distance) qui retourne vrai si la distance la plus courte entre A et B est inférieure ou égale à distance.

ST_Distance(geometry A, geometry B) qui calcule la distance la plus courte entre deux géométries.