Tous les produits
Search
Centre de documentation

AnalyticDB:Fonctions de relation spatiale

Dernière mise à jour :Aug 10, 2026

Utilisez les fonctions spatiales pour tester les relations topologiques entre deux objets géométriques. Chaque fonction renvoie 1 si la relation spécifiée est vérifiée, et 0 sinon.

Les fonctions de relation spatiale suivantes sont disponibles :

Fonction Relation testée
ST_Contains Tous les points de g2 se trouvent à l'intérieur de g1, et leurs intérieurs partagent au moins un point
ST_Crosses g1 et g2 partagent certains points intérieurs, mais pas tous
ST_Disjoint g1 et g2 ne partagent aucun point
ST_Equals g1 et g2 occupent exactement le même ensemble de points
ST_Intersects g1 et g2 partagent au moins un point
ST_Overlaps g1 et g2 ont la même dimension et se chevauchent, mais aucun ne contient l'autre
ST_Relate La relation spatiale entre g1 et g2 correspond à un modèle défini par une chaîne de matrice DE-9IM (Dimensionally Extended 9 Intersection Model)
ST_Touches g1 et g2 partagent au moins un point de frontière, mais aucun point intérieur
ST_Within Tous les points de g1 se trouvent à l'intérieur de g2, et leurs intérieurs partagent au moins un point (l'inverse de ST_Contains)

ST_Contains

ST_Contains(g1, g2)

Renvoie 1 si g1 contient entièrement g2, c'est-à-dire que tous les points de g2 se trouvent à l'intérieur de g1 et que les intérieurs de g1 et g2 partagent au moins un point. Renvoie 0 sinon.

La frontière de g1 ne fait pas partie de son intérieur. Un point situé exactement sur la frontière de g1 n'est pas contenu dans g1.

Type de retour : INT

Relation avec ST_Within : ST_Contains(A, B) est l'inverse de ST_Within(B, A). Les deux renvoient le même résultat.

Exemple :

SELECT ST_Contains(
    ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
    ST_GeometryFromText('POINT (2 2)')
);

Résultat :

+-----------------------------------------------------------------------------------------------------+
|ST_Contains(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POINT (2 2)')) |
+-----------------------------------------------------------------------------------------------------+
|                           1                                                                         |
+-----------------------------------------------------------------------------------------------------+

ST_Crosses

ST_Crosses(g1, g2)

Renvoie 1 si g1 et g2 se croisent spatialement, c'est-à-dire qu'ils partagent certains points intérieurs mais pas tous. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Crosses(
    ST_GeometryFromText('POINT (20 20)'),
    ST_GeometryFromText('POINT (25 25)')
);

Résultat :

+----------------------------------------------------------------------------------------------+
|ST_Crosses(ST_GeometryFromText('POINT (20 20)'), ST_GeometryFromText('POINT (25 25)'))        |
+----------------------------------------------------------------------------------------------+
|                 0                                                                            |
+----------------------------------------------------------------------------------------------+

ST_Disjoint

ST_Disjoint(g1, g2)

Renvoie 1 si g1 et g2 sont spatialement disjoints, c'est-à-dire qu'ils ne partagent aucun point. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Disjoint(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Résultat :

+--------------------------------------------------------------------------------------------------+
|ST_Disjoint(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+--------------------------------------------------------------------------------------------------+
|                        1                                                                         |
+--------------------------------------------------------------------------------------------------+

ST_Equals

ST_Equals(g1, g2)

Renvoie 1 si g1 et g2 sont spatialement égaux, c'est-à-dire qu'ils occupent exactement le même ensemble de points. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Equals(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Résultat :

+------------------------------------------------------------------------------------------------+
|ST_Equals(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+------------------------------------------------------------------------------------------------+
|                  0                                                                             |
+------------------------------------------------------------------------------------------------+

ST_Intersects

ST_Intersects(g1, g2)

Renvoie 1 si g1 et g2 s'intersectent spatialement, c'est-à-dire qu'ils partagent au moins un point. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Intersects(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Résultat :

+----------------------------------------------------------------------------------------------------+
|ST_Intersects(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+----------------------------------------------------------------------------------------------------+
|                 0                                                                                  |
+----------------------------------------------------------------------------------------------------+

ST_Overlaps

ST_Overlaps(g1, g2)

Renvoie 1 si g1 et g2 se chevauchent spatialement, c'est-à-dire qu'ils ont la même dimension, partagent certains points, mais aucun ne contient entièrement l'autre. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Overlaps(
    ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
    ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))')
);

Résultat :

+---------------------------------------------------------------------------------------------------------------------------------+
|ST_Overlaps(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))'))        |
+---------------------------------------------------------------------------------------------------------------------------------+
|                 1                                                                                                               |
+---------------------------------------------------------------------------------------------------------------------------------+

ST_Relate

ST_Relate(g1, g2, s1)

Renvoie 1 si la relation spatiale entre g1 et g2 correspond au modèle spécifié par la chaîne de matrice DE-9IM s1. Renvoie 0 sinon.

Le modèle DE-9IM (Dimensionally Extended 9 Intersection Model) décrit la relation entre deux géométries sous forme d'une chaîne de 9 caractères utilisant les symboles F, 0, 1, 2, T et *. Utilisez ST_Relate lorsqu'aucune fonction nommée (comme ST_Contains ou ST_Touches) ne couvre exactement la relation que vous devez tester.

Paramètres :

Paramètre Type Description
g1 geometry Première géométrie
g2 geometry Deuxième géométrie
s1 VARCHAR Chaîne de modèle de matrice DE-9IM (par exemple, 'T*****FF*')

Type de retour : INT

Exemple :

SELECT ST_Relate(
    ST_GeometryFromText('LINESTRING (0 0, 3 3)'),
    ST_GeometryFromText('LINESTRING (1 1, 4 1)'),
    '****T****'
);

Résultat :

+--------------------------------------------------------------------------------------------------------------------------+
|ST_Relate(ST_GeometryFromText('LINESTRING (0 0, 3 3)'), ST_GeometryFromText('LINESTRING (1 1, 4 1)'), '****T****')        |
+--------------------------------------------------------------------------------------------------------------------------+
|                 0                                                                                                        |
+--------------------------------------------------------------------------------------------------------------------------+

ST_Touches

ST_Touches(g1, g2)

Renvoie 1 si g1 et g2 se touchent spatialement, c'est-à-dire qu'ils partagent au moins un point de frontière mais aucun point intérieur. Renvoie 0 sinon.

Type de retour : INT

Exemple :

SELECT ST_Touches(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Résultat :

+-------------------------------------------------------------------------------------------------+
|ST_Touches(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+-------------------------------------------------------------------------------------------------+
|                     0                                                                           |
+-------------------------------------------------------------------------------------------------+

ST_Within

ST_Within(g1, g2)

Renvoie 1 si g1 se trouve entièrement dans g2, c'est-à-dire que tous les points de g1 sont à l'intérieur de g2 et que les intérieurs de g1 et g2 partagent au moins un point. Renvoie 0 sinon.

Type de retour : BOOLEAN

Relation avec ST_Contains : ST_Within(A, B) est l'inverse de ST_Contains(B, A). Les deux renvoient le même résultat.

Exemple :

SELECT ST_Within(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Résultat :

+-------------------------------------------------------------------------------------------------+
|ST_Within(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))         |
+-------------------------------------------------------------------------------------------------+
|                 0                                                                               |
+-------------------------------------------------------------------------------------------------+