Name

ST_Within — Tests si chaque point de A se trouve dans B, et que leurs intérieurs ont un point commun

Synopsis

boolean ST_Within(geometry A, geometry B);

Description

Renvoie TRUE si la géométrie A est à l'intérieur de la géométrie B. A est à l'intérieur de B si et seulement si tous les points de A se trouvent à l'intérieur (c'est-à-dire à l'intérieur ou à la limite) de B (ou de manière équivalente, aucun point de A ne se trouve à l'extérieur de B), et si les intérieurs de A et de B ont au moins un point en commun.

Pour que cette fonction ait un sens, les géométries sources doivent toutes deux avoir la même projection de coordonnées et le même SRID.

In mathematical terms: ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

The within relation is reflexive: every geometry is within itself. The relation is antisymmetric: if ST_Within(A,B) = true and ST_Within(B,A) = true, then the two geometries must be topologically equal (ST_Equals(A,B) = true).

ST_Within est le contraire de ST_Contains. Ainsi, ST_Within(A,B) = ST_Contains(B,A).

[Note]

Comme les intérieurs doivent avoir un point commun, une subtilité de la définition est que les lignes et les points situés entièrement dans la limite des polygones ou des lignes ne sont pas à l'intérieur de la géométrie. Pour plus de détails, voir Subtleties of OGC Covers, Contains, Within. Le prédicat ST_CoveredBy fournit une relation plus inclusive.

[Note]

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

Effectué par le module GEOS

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.

[Important]

Amélioration : 3.0.0 a permis la prise en charge de GEOMETRYCOLLECTION

[Important]

N'utilisez pas cette fonction avec des géométries non valides. Vous obtiendrez des résultats inattendus.

NOTE : il s'agit de la version "autorisée" qui renvoie un booléen et non un entier.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')

Cette méthode implémente la spécification SQL/MM.

SQL-MM 3: 5.1.30

Exemples

--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
  ST_Within(smallc, bigc) As smallinbig,
  ST_Within(bigc,smallc) As biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
FROM
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
--Result
 smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
 t            | t          | f          | t          | t          | t
(1 row)
    

Voir aussi

ST_Contains, ST_CoveredBy, ST_Equals, ST_IsValid