Name

ST_Contains — 如果B的点都不在A的外部,并且A和B至少有一个内点相同,则返回TRUE。

Synopsis

boolean ST_Contains(geometry geomA, geometry geomB);

描述

如果几何图形B完全在几何图形A中,则返回TRUE。当且仅当B的点不在A的外部且B的内部至少有一个点在A的内部时,A包含B。

这个定义的一个微妙之处在于,一个几何图形在其边界内不包含任何东西。因此,面和线可以 包含位于其边界内的线和点。有关更多详细信息,请参阅 OGC封面的精妙之处,包含,内 。( ST_Covers 谓词提供了更具包容性的关系。)但是,几何体确实包含其自身。(相比之下,在 ST_ContainsProperly 谓词几何体所做的 适当地控制自己。)

ST_CONTAINS是 ST_Within 。所以, ST_Contains(A,B) = ST_Within(B,A)

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_Contains

由GEOS模块执行

增强:2.3.0对PIP短路的增强扩展到支持多点和少点。以前的版本仅支持多边形中的点。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3-与内(几何图形B、几何图形A)相同

This method implements the SQL/MM specification. SQL-MM 3:5.1.31

示例

ST_Contains 退货 TRUE 在下列情况下:

LINESTRING / MULTIPOINT

POLYGON / POINT

POLYGON / LINESTRING

POLYGON / POLYGON

这个 ST_Contains 谓词返回 FALSE 在下列情况下:

POLYGON / MULTIPOINT

POLYGON / LINESTRING

-- A circle within a circle
SELECT ST_Contains(smallc, bigc) As smallcontainsbig,
     ST_Contains(bigc,smallc) As bigcontainssmall,
     ST_Contains(bigc, ST_Union(smallc, bigc)) as bigcontainsunion,
     ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,
     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
  smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                | t                | t                | t          | t        | f

-- Example demonstrating difference between contains and contains properly
SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
   ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba
FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),
       ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),
       ( ST_Point(1,1) )
    ) As foo(geomA);

  geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f

 

另请参阅

ST_Boundary, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Equals, ST_Within