ST_Covers — Tests si chaque point de B est situé dans A
boolean ST_Covers(
geometry geomA, geometry geomB)
;
boolean ST_Covers(
geography geogpolyA, geography geogpointB)
;
Renvoie true
si chaque point de la geometry/geography B se trouve à l'intérieur (c'est-à-dire qu'il coupe l'intérieur ou la limite) de la geometry/geography A. De façon équivalente, teste qu'aucun point de B ne se trouve à l'extérieur (dans l'extérieur) de A.
En termes mathématiques : ST_Covers(A, B) ⇔ A ⋂ B = B
ST_Covers est le contraire de ST_CoveredBy. Ainsi, ST_Covers(A,B) = ST_CoveredBy(B,A)
.
En général, cette fonction devrait être utilisée à la place de ST_Contains, car elle a une définition plus simple qui n'a pas la particularité que "les géométries ne contiennent pas leur frontière".
![]() |
|
Cette fonction inclut une comparaison de la boîte englobante qui utilise tous les index disponibles sur les géométries. Pour éviter l'utilisation d'un index, utilisez la fonction |
![]() |
|
Amélioration : 3.0.0 a permis la prise en charge de |
![]() |
|
N'utilisez pas cette fonction avec des géométries non valides. Vous obtiendrez des résultats inattendus. |
Effectué par le module GEOS
Amélioration : 2.4.0 Ajout de la prise en charge des polygones dans les polygones et des lignes dans les polygones pour le type geography
Amélioration : 2.3.0 Amélioration du court-circuit PIP pour la géométrie étendue à la prise en charge des multipoints avec peu de points. Les versions précédentes ne prenaient en charge que les points dans les polygones.
Disponibilité : 1.5 - le support de la geography a été introduit.
Disponibilité : 1.2.2
NOTE : il s'agit de la version "autorisée" qui renvoie un booléen et non un entier.
Il ne s'agit pas d'une norme de l'OGC, mais Oracle l'a également.
Exemple géométrique
--a circle covering a circle SELECT ST_Covers(smallc,smallc) As smallinsmall, ST_Covers(smallc, bigc) As smallcoversbig, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior --------------+----------------+-------------------+--------------------- t | f | t | f (1 row)
Exemple géographique
-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt, ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly, ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo; poly_covers_pt | buff_10m_covers_cent ----------------+------------------ f | t