- Catégories :
ST_INTERSECTION¶
En tenant compte de deux objets GEOGRAPHY d’entrée, renvoie un objet GEOGRAPHY qui représente la forme de l’ensemble des points qui sont communs aux deux objets d’entrée (c’est-à-dire l’intersection des deux objets).
- Voir aussi :
ST_INTERSECTION_AGG , ST_UNION , ST_DIFFERENCE , ST_SYMDIFFERENCE
Syntaxe¶
ST_INTERSECTION( <geography_expression_1> , <geography_expression_2> )
Arguments¶
geography_expression_1
Un objet GEOGRAPHY.
geography_expression_2
Un objet GEOGRAPHY.
Renvoie¶
La fonction renvoie une valeur de type GEOGRAPHY.
Notes sur l’utilisation¶
Si un sommet d’un objet d’entrée se trouve sur la limite de l’autre objet d’entrée (à l’exclusion des sommets), la sortie peut inclure ou non ce point de sommet.
Par exemple, supposons que
geography_expression_1
soitPOINT(1 1)
et quegeography_expression_2
soitLINESTRING(1 0, 1 2)
. Dans ce cas,geography_expression_1
est sur la limite degeography_expression_2
mais n’en est pas un sommet.Dans cet exemple, la sortie attendue est
POINT(1 1)
, mais la sortie réelle pourrait être une géographie vide (représentée par NULL).Pour aider à détecter et à contourner ces cas, une idée potentielle consiste à utiliser ST_DWITHIN pour déterminer si la distance minimale entre les deux objets d’entrée est
0
. Par exemple, vous pouvez vérifier si un point se trouve au sommet d’un LineString en vérifiant si la distance minimale entre les deux objets est égale à zéro :SELECT TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))') AS polygon, TO_GEOGRAPHY('POINT(0 2)') AS point, ST_DWITHIN(polygon, point, 0) AS point_is_on_top_of_polygon, ST_INTERSECTION(polygon, point);
Cette instruction produit le résultat suivant :
+--------------------------------------------+------------+----------------------------+---------------------------------+ | POLYGON | POINT | POINT_IS_ON_TOP_OF_POLYGON | ST_INTERSECTION(POLYGON, POINT) | |--------------------------------------------+------------+----------------------------+---------------------------------| | POLYGON((0 0,1 0,2 1,1 2,2 3,1 4,0 4,0 0)) | POINT(0 2) | True | NULL | +--------------------------------------------+------------+----------------------------+---------------------------------+
Il n’est pas garanti que la fonction produise des résultats normalisés et/ou minimaux. Par exemple, une sortie peut consister en un LineString contenant plusieurs points qui ne forment en fait qu’un seul segment droit.
Exemples¶
L’exemple suivant renvoie un objet GEOGRAPHY qui représente l’intersection de deux objets GEOGRAPHY en entrée :
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT'; SELECT ST_INTERSECTION( TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))'), TO_GEOGRAPHY('POLYGON((3 0, 3 4, 2 4, 1 3, 2 2, 1 1, 2 0, 3 0))')) AS intersection_of_objects;
Cet exemple produit le résultat suivant :
+-----------------------------------------------------------------------------------------------------------------------------------------+ | INTERSECTION_OF_OBJECTS | |-----------------------------------------------------------------------------------------------------------------------------------------| | MULTIPOLYGON(((1.5 0.5000571198,2 1,1.5 1.500171359,1 1,1.5 0.5000571198)),((1.5 2.500285599,2 3,1.5 3.500399839,1 3,1.5 2.500285599))) | +-----------------------------------------------------------------------------------------------------------------------------------------+
Les images suivantes illustrent les différences dans les zones qui représentent les objets d’entrée et de sortie :
Entrée |
Sortie |
---|---|